现代C ++只添加了一种新类型" xvalue"?函数返回的正确引用是xvalue,这是定义的,就像函数参数中的右引用一样,它只能绑定到正确的值?这些理解是否正确? 与该主题相关的问题和答案可以从学习者的角度处理这个问题。在这里,我尝试从设计师的角度来了解这个主题。例如,int b = 3; INT&安培;&安培; x = std :: move(b);这个std :: move的返回值是一个xvalue,它可以绑定到rreference,这是设计者设置的规则。 (合理且可用)。设计者还可以设置xvalue需要绑定左引用的规则,即使这不是一个好规则。
答案 0 :(得分:1)
这里要小心术语。函数参数或函数返回类型可能具有/是左值引用类型,但不是xvalue,因为术语" xvalue"仅适用于表达式。
每个表达式都是左值,左值或右值。最常见的xvalue类型是一个表达式,它调用一个具有右值引用类型作为返回类型的函数。对rvalue引用类型执行强制转换的表达式也是xvalue。表达式也可以是xvalue的其他几种方式。
右值参考是一种类型。使用rvalue引用类型声明的变量可以使用xvalue或prvalue初始化,但不能使用左值(除非通过用户定义的转换)。请记住,声明为右值引用的变量的名称是左值,而不是xvalue!
int n = 3; // 1
int&& r1 = static_cast<int&&>(n); // 2
int&& r2 = std::move(r1); // 3
int&& func(int&& arg); // 4
此代码示例中的表达式为:
3
:prvalue n
:左值static_cast<int&&>(n)
:xvalue r1
:左值std::move(r1)
:xvalue 第4行根本没有表达。