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

eda*_*els 10 c++ c++11 c++14

特定

void foo( int&& x ) {

    std::cout << &x;
}
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*vin 8

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

int y = 5; foo(static_cast<int&&>(y));不会创造一个临时的.此转换5.2.9/3在标准的一部分中描述:

如果" "与" " 引用兼容,cv1 T1则可以转换类型为" " 的glvalue,类prvalue或数组prvalue 以键入"rvalue reference to ".cv2 T2cv2 T2cv1 T1

例如,如果您打电话,将创建临时foo(1);.

  • @Peregring-lk 如果您写自己的博客文章或与认识很长时间的人交谈,则可以这样做,或者您应该参考一些来源,因为 C++ 标准中没有“匿名对象”的定义。在这里回答时,我认为最好使用每个人都知道或至少可以在众所周知的地方查找的术语。 (2认同)