繁体   English   中英

将左值引用绑定到右值引用?

[英]Bind an lvalue reference to an rvalue reference?

我试图编译:

int &&a=3;
int &b=a;

而且有效。 我知道“ a”是左值,但是为什么我可以将“对int的右值引用”绑定到“对int的左值引用(而不是对int的右值引用)”? 这样,我可以更改临时值3:

b=5 //changing the value of the temporary bound to the rvalue reference

该技术是从std :: forward使用的,所以我认为它是标准行为。 对int的右值引用是否被视为存储临时值的简单int左值? 如果没有,您如何解释绑定?

引用不绑定到其他引用。 它们绑定到对象。

当您从3初始化a时,会创建一个新的临时int对象, 其寿命会延长 b只是对该对象的另一个引用。

请注意, a 一个左值,因为它是一个命名对象的表达式,即使它的类型为 “ rvalue-reference to int ”! 注意不要将类型值类别混淆,这里:类型与对象有关,但值类别与表达式有关 (即使这些表达式命名或以其他方式对某个对象求值)。

这些令人困惑的规则在您考虑时都非常整齐地融合在一起:为了使原始引用有效,必须延长对象的生存期,因此b的初始化是安全的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM