C++/탐구

Lvalue? Rvalue?

WhNi 2024. 3. 24. 13:48

프로그래밍 하다보면 은근 lvalue 에러를 흔하게 접하게 된다. 

간단한 실수에서 비롯된 에러지만 정확하게 원인을 알아서 다음번에 안 생길 문제이다.

 

정확한 정의와 지식을 파악해보자

 

Lvalue : 이름(변수) 를 통해 접근할 수 있는 값.

Rvaule  : 값 자체. 리터럴 1 은 rvalue 임. 임시 레지스터를 제외하면 특정 메모리 주소가 없음.

 

int a = 1; // a는 lvalue 1은 rvlaue
int b = 2; // b도 lvalue 2는 rvlaue

int c;
 3 = c; // error 가 남.

 

리터럴 상수에 rvalue이기 떄문에 특정 메모리 주소가 없기에 주소를 할당시키려고 하면 에러가 나는것.

 

그래서 할당 연산자 = 를 기준으로 lvalue와 rvalue를 구분하는것이 외우기 편하다.

 

그래서 참조 연산자&를 사용할때 rvalue인 것들을 참조하게 되면 대부분 에러가 나는것을 항상 염려해두고 코딩을 해야한다.

 

실제 객체가 있는지 없는지 중요한게 바로 이때문이다. C++은 메모리 관리 때문에, 임시로 만든 것과 실제 주소가 있는 객체의 구분이 굉장히 중요하다. 

 

이 변수가 실제 주소가 있는 값인지, 아니면 리터럴 상수나 임시로 생겨진 값인지 고려하는게 정확한 메모리 관리를 해야하는 C++ 상 중요한 맥락인거 같다.