特定
void foo( int&& x ) {
std::cout << &x;
}
Run Code Online (Sandbox Code Playgroud)
这有效,但这个地址实际上代表了什么?int
调用foo时是否是临时创建的,这是地址所代表的内容?如果这是真的,如果我写int y = 5; foo(static_cast<int&&>(y));
,这是否会导致另一个临时创建或编译器智能地引用y?
当你获取一个右值引用的地址时,它返回一个指向引用绑定的对象的指针,就像左值引用一样.该对象可以是临时的或不是临时的(例如,如同在代码中一样,将左值转换为右值引用).
int y = 5; foo(static_cast<int&&>(y));
不会创造一个临时的.此转换5.2.9/3
在标准的一部分中描述:
如果" "与" " 引用兼容,
cv1 T1
则可以转换类型为" " 的glvalue,类prvalue或数组prvalue 以键入"rvalue reference to ".cv2 T2
cv2 T2
cv1 T1
例如,如果您打电话,将创建临时foo(1);
.