【发布时间】:2018-11-12 17:10:02
【问题描述】:
现代 C++ 只增加了一种新类型“xvalue”?函数返回的右引用是xvalue,this是定义的,就像函数参数中的右引用一样,只能绑定右值?这些理解正确吗? 与此主题相关的问题和答案从学习者的角度处理此问题。这里我尝试从设计师的角度去了解这个话题。例如,int b =3; int&& x = std::move(b); std::move 的这个返回值是一个 xvalue,它可以绑定到 rreference,这是设计者设定的规则。 (合理可用)。设计者也可以设置xvalue需要绑定左引用的规则,虽然这不是一个好规则。
【问题讨论】:
-
你有具体的例子吗?
-
我的问题是它们是由 C++ 设计师从无到有定义或创建的吗?当然,设计者必须保持规则不相互冲突。例如,函数参数列表中的右边ref是绑定到调用者参数后的左值,这被扣除未定义。我在网上查了答案,这里只是为了验证我的理解。
-
void fcn(int && a); int&& fcn2() { return 42;} fcn(32);//现在a是左值
-
简单地说,xvalue 是一个左值(它指的是一个对象),因为它会消失或者因为没有人再关心它,所以可以使用它。
-
@curiousguy glvalue 和 prvalue 只会让学习者更加困惑。真正的新东西是“&&”,当它出现在函数参数列表中时,它可以绑定到右值;当出现函数返回结果时,它是一个可以绑定到前者的rvalue/xvalue。这些规则是由 c++ 设计者设定的。我们只能跟随。