문제 인식
LValue 및 RValue
LValue
int a = 1;
int b = 2;
- 지난 포스트에 a, b는 LValue / 1, 2는 RValue라고 했다.
- 조금 더 자세히 설명하자면, a와 b의 경우 이 줄이 지나간 이후에도 남아있게 된다.
- 쉽게 말해서, '식별자'가 있다고 생각하면 편하다.
- 거기에 더해서, 식별자에 접근하여 메모리 저장이 가능한 경우가 LValue가 된다.
RValue
- 지난 포스트에서는 LValue를 제외한 모든 값이라고 정의했다. (C++11 이전의 정의)
- 이번에는 새로 나오는 값들과 같이 다시 정의하려 한다.
glvalue vs rvalue
- 식별자의 유무 및 move가 가능한지 여부에 따라 크게 두 부류로 먼저 나뉜다.
- glvalue의 경우, 식별자가 있는 케이스이다.
- rvalue의 경우, 하단에서 추가로 말하겠지만, move가 가능한 케이스이다.
lvalue, xvalue, prvalue
- 아직은 기록하지 않은 부분에 대한 기준으로 나뉜다. (move가 가능한가?)
- 이 부분은 Move Sematics에서 서술하겠다.
- lvalue의 경우 move가 불가능한 케이스이다.
- rvalue(xvalue, prvalue)의 경우 move가 가능한 케이스이다.