[C++] value 카테고리
1. Value 카테고리
- lvalue : lvalue reference return
- rvalue : rvalue reference return, value return
- rvalue reference return : xvalue
- value return : prvalue
2. Value 별 특징
- cppreference
- lvalue : copy, polymorphic , Id
- xvalue : move, polymorphic , Id
-
prvalue : move, non-polymorphic , no Id
- glvalue : lvalue + xvalue
- rvalue : xvalue + prvalue
3. 코드로 알아보기
- web_compiler 에서 확인
#include <iostream>
using namespace std;
int x = 0;
int f1() { return x; }
int& f2() { return x; }
int&& f3() { return move(x); }
int main()
{
f1() = 10; // error , value return
f2() = 20; // ok , lvalue ref return
f3() = 30; // error , rvalue ref return
}
#include <iostream>
using namespace std;
struct Base {
virtual void foo() { cout << "B::foo" << "\n"; }
};
struct Derived : public Base {
virtual void foo() { cout << "D::foo" << "\n"; }
};
Derived d;
Base f1() { return d; }
Base& f2() { return d; }
Base&& f3() { return move(d); }
int main()
{
Base b1 = f1(); // 임시객체, move
Base b2 = f2(); // copy
Base b3 = f3(); // move
f1().foo(); // B::foo, value return , 임시객체이므로 Base foo 호출
f2().foo(); // D::foo, lvalue ref return , 이름을 가지므로 Derived foo 호출
f3().foo(); // D::foo, rvalue ref return , 이름을 가지므로 Derived foo 호출
}
참고
codenuri 강석민 강사 강의 내용기반으로 정리한 내용입니다.
코드누리
cppreference
This is personal diary for study documents.
Please comment if I'm wrong or missing something else 😄.
댓글남기기