现代 C++ 只添加了一种新类型“xvalue”?函数返回的右引用是xvalue,this是定义的,就像函数参数中的右引用一样,只能绑定右值?这些理解正确吗?与此主题相关的问题和答案从学习者的角度处理此问题。这里我尝试从设计师的角度去了解这个话题。例如,int b =3;int&& x = std::move(b); std::move 的这个返回值是一个 xvalue,它可以绑定到 rreference,这是设计者设置的规则。(合理可用)。设计者还可以设置一个xvalue需要绑定左引用的规则,即使这不是一个好的规则。
问问题
225 次
1 回答
1
请注意此处的术语。函数参数或函数返回类型可能具有/是右值引用类型,但不是 xvalue,因为术语“xvalue”仅适用于表达式。
每个表达式要么是左值,要么是 xvalue,要么是 prvalue。最常见的 xvalue 类型是调用具有右值引用类型作为其返回类型的函数的表达式。对右值引用类型进行强制转换的表达式也是一个 xvalue。表达式也可以通过其他几种方式成为 xvalue。
右值引用是一种类型。用右值引用类型声明的变量可以用 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
第 1 行:prvaluen
第 2 行:一个左值static_cast<int&&>(n)
第 2 行:一个 xvaluer1
第 3 行:一个左值std::move(r1)
第 3 行:一个 xvalue
第 4 行根本没有表达式。
于 2018-06-03T01:15:52.690 回答