-1

现代 C++ 只添加了一种新类型“xvalue”?函数返回的右引用是xvalue,this是定义的,就像函数参数中的右引用一样,只能绑定右值?这些理解正确吗?与此主题相关的问题和答案从学习者的角度处理此问题。这里我尝试从设计师的角度去了解这个话题。例如,int b =3;int&& x = std::move(b); std::move 的这个返回值是一个 xvalue,它可以绑定到 rreference,这是设计者设置的规则。(合理可用)。设计者还可以设置一个xvalue需要绑定左引用的规则,即使这不是一个好的规则。

4

1 回答 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 行:prvalue
  • n第 2 行:一个左值
  • static_cast<int&&>(n)第 2 行:一个 xvalue
  • r1第 3 行:一个左值
  • std::move(r1)第 3 行:一个 xvalue

第 4 行根本没有表达式。

于 2018-06-03T01:15:52.690 回答