int&& rv = 10;
int& lv = rv; //no error
Run Code Online (Sandbox Code Playgroud)
这怎么可能?
这与"参考崩溃规则"有关吗?
int&& rv = 10;
int& lv = rv; //no error
Run Code Online (Sandbox Code Playgroud)
首先,命名对象永远不是右值.其次,既然rv是命名对象,它就不是右值,即使它绑定到右值.由于rv是左值,它可以毫无问题地绑定到左值.
请注意,rvalue-ness是表达式的属性,而不是变量.在上面的例子中,一个rvalue被创建出来10并且绑定到rv,正如我所说,它是左值.