C++ lvalue vs rvalue: 주소가 있느냐 없느냐가 갈린다!

Bean·2025년 6월 26일

프로그래밍

목록 보기
8/46

C++에서 lvalue와 rvalue란?

"메모리에 주소가 있느냐 없느냐"가 핵심!

C++을 공부하다 보면 꼭 등장하는 개념이 있습니다.
바로 lvaluervalue인데요.
이 두 가지는 단순한 이론이 아니라, 참조, 복사, 이동, 성능 최적화와 관련된 매우 중요한 핵심 개념입니다.


1. lvalue (locator value)

메모리상에 주소가 존재하는 값

즉, 변수처럼 이름이 있고, 수정하거나 참조할 수 있는 값이 lvalue입니다.

int x = 10;   // x는 lvalue → 메모리에 주소가 있음
x = 20;       // OK! 값을 바꿀 수 있음
  • 변수, 배열 요소, 참조 반환값 등
  • 주소 존재 → 참조(&) 가능

2. rvalue (read value)

일시적으로 존재하는 값, 주소가 없음

10, x + y, func()처럼 임시로 생성되어 곧 사라질 값rvalue입니다.

int y = x + 10; // (x + 10)은 rvalue, y는 lvalue
  • 상수, 연산 결과, 임시 객체 등
  • 주소 없음 → 직접 참조 불가

3. 왜 이 구분이 중요한가요?

C++은 lvalue와 rvalue를 구분해서 다음과 같은 것을 결정합니다:

구분설명
int&lvalue 참조: 변수처럼 존재하는 것만 가능
int&&rvalue 참조: 임시값만 받을 수 있음
이동 시멘틱스rvalue를 활용해서 복사를 피하고 성능 향상

4. 요약 비교표

구분의미예시주소 있음참조 가능
lvalue이름 있는 변수, 존재함x, arr[0]✅ 있음✅ 가능
rvalue임시값, 사라질 값10, x + 3, func()❌ 없음❌ 직접 불가 (단, &&로는 가능)

5. 예제 코드

int a = 5;           // a는 lvalue
int b = a + 3;       // (a + 3)은 rvalue

int& ref1 = a;       // OK: lvalue 참조
int& ref2 = a + 3;   // ❌ 에러: rvalue는 lvalue 참조 불가

int&& ref3 = a + 3;  // OK: rvalue 참조

profile
AI developer

0개의 댓글