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++ 상 중요한 맥락인거 같다.