现代C ++,对xValue的理解

modern c++, understanding of xvalue

本文关键字:xValue 现代      更新时间:2023-10-16

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

请注意这里的术语。 函数参数或函数返回类型可能具有/是右值引用类型,但不是 x值,因为术语"xvalue"仅适用于表达式。

每个表达式都是左值、x值或 prvalue。 最常见的 xvalue 类型是调用具有 rvalue 引用类型作为其返回类型的函数的表达式。 强制转换为右值引用类型的表达式也是 xvalue。 表达式也可以通过其他几种方式成为 xvalue。

右值引用是一种类型。 使用 rvalue 引用类型声明的变量可以使用 xvalue 或 prvalue 初始化,但不能使用 lvalue 初始化(除非通过用户定义的转换(。 请记住,声明为右值引用的变量的名称是左值,而不是 x值!

int n = 3;                          // 1
int&& r1 = static_cast<int&&>(n);   // 2
int&& r2 = std::move(r1);           // 3
int&& func(int&& arg);              // 4

此代码示例中的表达式包括:

  • 第 1 行3:价值
  • 第 2 行n:左值
  • 第 2 行static_cast<int&&>(n):一个 xvalue
  • 第 3 行r1:左值
  • 第 3 行std::move(r1):一个 xvalue

第 4 行中根本没有表达式。