非 const 引用现在可以引用临时对象?

3
自从引入了移动语义,那么只能将临时对象绑定到const引用的规则是否改变了?非const引用似乎同样可以扩展生命周期。
 A getA() { return A();}  

 A & aref = getA(); //OK
 string & str = string("h") + string("i"); //OK again

使用msvc编译,A的析构函数在main结束之前不会被调用。


你使用的 MSVC 版本是哪个? - NathanOliver
1个回答

7
不可以将rvalue绑定到非const lvalue引用,规则是一样的。MSVC使用了一个(危险的)扩展功能。

你能解释一下从非const引用编辑返回值的危险吗?这只是因为人们可能会尝试返回实际函数作用域引用而不是别名到临时变量吗? - ollo
MSVC发出警告,指示它是一个非标准扩展。 - Adrian McCarthy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接