取rvalue引用的地址是什么意思?

时间:2014-10-14 23:50:33

标签: c++ c++11 c++14

鉴于

void foo( int&& x ) {

    std::cout << &x;
}

这可行,但这个地址实际上代表什么?调用foo时是否创建了临时int,这是地址所代表的内容?如果这是真的并且如果我写int y = 5; foo(static_cast<int&&>(y));,这是否会导致创建另一个临时或编译器是否会智能地引用y?

1 个答案:

答案 0 :(得分:7)

当你获取一个右值引用的地址时,它返回一个指向引用绑定的对象的指针,就像左值引用一样。该对象可以是临时的或不是临时的(例如,您可以像在代码中一样将左值转换为右值引用)。

int y = 5; foo(static_cast<int&&>(y));不会创建临时的。此转换在标准的5.2.9/3部分中进行了描述:

  

如果“cv1 T1”与“cv2 T2”引用兼容,则可以强制使用类型为“cv2 T2”的glvalue,类prvalue或数组prvalue来键入“对cv1 T1的右值引用” foo(1);”。

例如,如果您拨打{{1}},则会创建临时。