【发布时间】:2014-10-15 08:14:57
【问题描述】:
给定
void foo( int&& x ) {
std::cout << &x;
}
这行得通,但这个地址实际上代表什么?调用 foo 时是否创建了一个临时的int,这就是地址所代表的含义?如果这是真的并且如果我写int y = 5; foo(static_cast<int&&>(y));,这是否会导致创建另一个临时变量,或者编译器会智能地引用 y?
-
不一定是临时的。没有什么能阻止你做
int x = 42; foo(x); -
FWIW,你的演员只是
std::move(y)。 -
@IgorTandetnik,这不会编译,因为右值引用不会绑定到左值。
-
@chris 我知道,但我只是想明确声明我正在创建一个右值引用,因为 std::move 没有最好的名称
-
右值不必是临时的。临时值是纯右值,但并非所有右值都是临时值。绑定到右值引用的对象的关键特征是该对象不应有任何其他别名。 (这不是由类型系统强制执行的,但这是您应该使用它的方式。)