GameDevelop/Notes

l-value와 r-value

Une_ 2026. 1. 1. 18:01

l-value와 r-value 정리입니다.

구글링 및 ChatGPT의 도움을 받아 작성했습니다.

 

1. 한 문장 정의

  • l-value: → 메모리에 이름이 있고, 다시 접근할 수 있는 값
  • r-value: → 임시로 생성되며, 이름이 없고 곧 사라질 값

2. 코드로 보는 차이

int a = 10;
// a → l-value
// 10 → r-value

a = 20; // OK
10 = a; // 컴파일 에러

 

👉 l-value는 대입의 왼쪽에 올 수 있다.

 

3. 메모리 관점에서의 차이

l-value

  • 메모리 주소가 있음
  • 수명이 명확함
  • 참조 가능

r-value

  • 임시 객체
  • 표현식이 끝나면 소멸
  • 주소를 직접 잡기 어려움

 

4. 참조(&, &&)와의 관계

l-value reference (T&)

void Func(int& x);
  • l-value만 받을 수 있음
  • 기존 객체 수정 가능

r-value reference (T&&)

void Func(int&& x);
  • r-value만 받을 수 있음
  • 이동(move) 대상

👉 C++11 이후 성능 최적화의 핵심

불필요한 복사를 피하고, 임시 객체의 자원을 재사용할 수 있다!

 

5. 이동 시맨틱과 게임 프로그래밍

왜 중요한가?

게임에서는 다음이 매우 빈번하다.

  • 큰 컨테이너 반환
  • 임시 객체 생성
  • Tick 단위 반복 호출

복사가 계속 일어나면:

  • 성능 저하
  • 메모리 낭비

예시

std::vector<int> CreateData();

 

  • 반환값은 r-value
  • 복사 대신 move 가능

 

std::vector<int> data = CreateData();
// 반환값은 r-value, 이동 가능

👉 게임 로딩, 리소스 생성에서 매우 중요

 

6. Unreal Engine 관점

  • MoveTemp() → 명시적 r-value 캐스팅
  • TArray, TMap 이동 최적화
TArray<int32> A = CreateArray();
TArray<int32> B = MoveTemp(A); // A는 더 이상 유효 데이터 없음

7. 한 문장 정리

l-value는 지속적인 메모리 위치를 가진 값이고, r-value는 일시적인 임시 값입니다. C++에서는 이를 구분하여 복사 대신 이동을 가능하게 함으로써 성능을 최적화합니다.

 

'GameDevelop > Notes' 카테고리의 다른 글

해시테이블과 해시충돌  (0) 2026.01.09
A* 알고리즘  (0) 2026.01.05
쿼터니언(Quaternion) vs 오일러 각(Euler Angle)  (0) 2026.01.01
벡터의 내적과 외적  (0) 2026.01.01
RAII - Resource acquisition is initialization  (0) 2024.09.10