Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++의 Lvalue와 Rvalue, 핵심만 쉽게 이해하기

C++에서 Lvalue와 Rvalue란 무엇인가?

C++ 프로그래밍에서 모든 표현식(expression)은 lvalue 또는 rvalue 중 하나로 분류됩니다. 이 두 가지 개념을 정확히 구분하는 것은 포인터, 참조(reference), 그리고 이동 시맨틱(move semantics)을 제대로 활용하기 위해 반드시 필요한 기본 지식입니다.

Lvalue(Locator Value)란?

lvalue(locator value)는 메모리에서 식별 가능한 특정 위치를 차지하는 객체를 의미합니다. 쉽게 말해, 고유한 메모리 주소를 가지고 있어 프로그램이 해당 위치에 접근하거나 새로운 값을 저장할 수 있는 대상입니다. 일반적으로 우리가 선언하는 변수 이름이 대표적인 lvalue에 해당합니다.

Rvalue란?

rvalue는 배제 방식으로 정의됩니다. 모든 표현식은 lvalue이거나 rvalue이기 때문에, rvalue란 '메모리에서 식별 가능한 위치를 차지하지 않는 표현식'이라고 할 수 있습니다. 숫자 리터럴(예: 10), 임시 객체, 연산의 결과값 등이 여기에 속합니다.

예제로 이해하기

대입 연산자(=)는 왼쪽 피연산자로 반드시 lvalue를 요구합니다. 따라서 아래 코드는 문제없이 동작합니다.

int i = 10;

반면, 아래 코드는 컴파일 오류를 발생시킵니다.

int i;
10 = i; // 오류 발생!

그 이유는 변수 i는 메모리 상에 실제 주소를 가지므로 lvalue이지만, 숫자 10은 식별 가능한 메모리 위치가 없는 rvalue이기 때문입니다. 따라서 i의 값을 10에 대입하는 것은 논리적으로 아무런 의미가 없습니다.

핵심 정리

  • Lvalue: 메모리 주소를 가지며, 대입문의 왼쪽에 위치할 수 있습니다.
  • Rvalue: 식별 가능한 메모리 위치가 없으며, 주로 값 그 자체를 나타냅니다.

이처럼 lvalue와 rvalue의 구분은 단순한 문법 지식을 넘어, C++의 참조 전달과 성능 최적화 기법을 이해하는 데 중요한 출발점이 됩니다.