#include <iostream>
using namespace std;
void doSomething(int &lref)
{
cout << "L-value ref" << "\n";
}
void doSomething(int &&ref)
{
cout << "R-value ref" << "\n";
}
int getResult()
{
return 100*100;
}
int main()
{
int x = 5; // R-value는 이 문장이 끝나면 사라짐
int y = getResult();
const int cx = 6;
const int cy = getResult();
// L-value references
int &lr1 = x; // Modifiable l-values
// int &lr2 = cx; // Non-modifiable l-values
// int &lr3 = 5; // R-avlues // 메모리 주소가 없으므로 에러.
const int &lr4 = x; // Modifiable l-values
const int &lr5 = cx; // Non-modifiable l-values
const int &lr6 = 5; // R-values
// R-value references
// int &&rr1 = x; // Modifiable l-values
// int &&rr2 = cx; // Non-modifiable l-values
int &&rr3 = 5; // R-values // 곧 사라질 아이들만 담겨질 수 있다.
int &&rrr = getResult(); // 임시로만 저장되어 있는 애를 어딘가에 저장해놓는다. 왜 필요할까?
cout << rr3 << "\n"; // 5
rr3 = 10;
cout << rr3 << "\n"; // 10
// const int &&rr4 = x; // Modifiable l-values
// const int &&rr5 = cx; // Non-modifiable l-values
const int &&rr6 = 5; // R-values
// L/R-value referecne
doSomething(x); // l-value
//doSomething(cx); const를 인자로 받지 못한다.
doSomething(5); // 메모리를 갖지 못하는 애들은 R-value
doSomething(getResult()); // R-value
return 0;
}