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であるということに、注意しなければならない。
と説明がある。