メモの日々


2014年01月30日(木) [長年日記]

[c++] rvalueリファレンス自体はlvalue

C++11のrvalueリファレンスの理解が怪しい。次のプログラムが

right
left
right

と出力するleftの所がいまいちピンとこない。確かに左側にあるけど。

#include <iostream>
#include <utility>

void f(int& i) { std::cout << "left" << std::endl;}
void f(int&& i) { std::cout << "right" << std::endl; }

int main() {
  {
    int i0 = 0;
    f(std::move(i0)); //=> right
  }
  {
    int i0 = 0;
    int&& i1 = std::move(i0);
    f(i1); //=> left
  }
  {
    int i0 = 0;
    int&& i1 = std::move(i0);
    f(std::move(i1)); // right
  }
}

C++11の文法と機能(C++11: Syntax and Feature)

rvalueリファレンス自体はlvalueであるということに、注意しなければならない。

と説明がある。