Dim*_*imG 2 c++ rvalue-reference c++11
有很多与右值相关的问题,但我没有找到这些确切问题的答案。
我无法完全理解“命名引用是左值引用”的经验法则。
这看起来真的很奇怪——我们将引用声明为右值,但由于我们必须以某种方式使用这个引用(否则,有什么意义?),我们命名它,因为它被命名为它毕竟是一个左值!
考虑这段代码:
int&& foo(int&& arg)
{
arg = 10;
return arg; // ERROR, `arg` is an lvalue since it's named!
}
foo(1);
Run Code Online (Sandbox Code Playgroud)
问题是:
arg转换,然后尝试隐式转换为which 导致编译错误 - 只是相反的行为!这就是为什么我们需要它基本上是一个显式的 static_cast 到右值类型。int&&int&int&int&&std::movearg该变量有类型int&&但没有值类别。
arg表达式(它是第 3 行和第 4 行的表达式)的类型int和值类别为“lvalue”
左值到右值的转换会更改表达式的值类别,但不会更改其类型。arg+1如果您在函数内部编写, argtype 的左值表达式int将经历此转换以生成 type 的纯右值表达式int,因为这是built-in+所需要的。
int& 和 int&& 之间不存在“左值到右值”或反向转换,因为表达式从来没有引用类型。程序中的错误是无法将右值引用(类型为 int&&)绑定到左值表达式(类型为int)。
| 归档时间: |
|
| 查看次数: |
727 次 |
| 最近记录: |