C++/SmartPointer 2021. 3. 24. 10:35

R-value Reference

R-value

  • L-value와 달리 메모리 주소가 저장되지 않는 값을 의미한다.

예제

  • 주소를 가지고 있지 않은 리터럴 값이나 함수의 반환 값 등을 참조할 수 있다.

    #include <iostream>
    
    using namespace std;
    
    void        doSomething(int& ref)
    {
      cout << "L-value ref\n";
    }
    
    void        doSomething(int&& ref)
    {
      cout << "R-value ref\n";
    }
    
    int            getResult()
    {
      return 100 * 100;
    }
    
    int            main()
    {
      int x = 5;
      int y = getResult();
      const int cx = 6;
      const int cy = getResult();
    
      // L-value References
    
      int& lr1 = x;
      //int& lr2 = cx;
      //int& lr3 = 5;
    
      const int& lr4 = x;
      const int& lr5 = cx;
      const int& lr6 = 5;
    
    
// R-value references

//int&& rr1 = x;
//int&& rr2 = cx;
int&& rr3 = 5;
int&& rrr = getResult();

cout << rr3 << endl;
rr3 = 10;
cout << rr3 << endl;

//const int&& rr4 = x;
//const int&& rr5 = cx;
const int&& rr6 = 5;

doSomething(x);
doSomething(5);
doSomething(getResult());

}

/* stdout stderr
5
10
L-value ref
R-value ref
R-value ref
*/
```