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であるということに、注意しなければならない。
と説明がある。
[ツッコミを入れる]