[C++] l-value, r-value
Updated:
개요
- l-value
- locator 혹은 left의 약자로 메모리 위치를 참조할 수 있는 값을 의미
- 주로 등호(=) 왼쪽에 위치할 뿐 오른쪽에 위치 가능
- r-value
- right의 약자로 식의 값을 의미
- 모든 l-value는 r-value이지만 모든 r-value가 l-value는 아님
- 즉 l-value가 아닌 r-value는 등호 왼쪽에 위치 불가
- l-value reference
- &로 정의된 레퍼런스
- r-value를 받을 수 없음
- const reference
- l-value, r-value 모두 받을 수 있음
- r-value reference
- &&로 정의된 레퍼런스
- 복사가 아닌 이동
- const reference로 r-value를 받을 경우 수정이 불가능한 문제를 해결
int &&i = 3;
- i는 타입이 r-value reference인 l-value
- i를 함수 인자로 전달하면 l-value 인자 함수 호출
코드
#include <iostream>
using namespace std;
void func(int &i) { cout << "func(int &i)" << endl; }
void func(const int &i) { cout << "func(const int &i)" << endl; }
void func(int &&i) {
i = 5;
cout << "func(int &&i) - " << i << endl;
}
int main() {
int i = 1;
// int &i1 = 1;
const int &i2 = 2;
int &&i3 = 3;
// int &&i4 = i;
func(i);
func(i2);
func(i3);
func(3);
cout << i << ", " << i2 << ", " << i3 << endl;
return 0;
}
실행 결과
func(int &i)
func(const int &i)
func(int &i)
func(int &&i) - 5
1, 2, 3