C++11 左值到右值的转换?

And*_*zos 3 c++ c++11

我认为我缺少一些关于左值到右值标准转换的基本知识。

从 C++11 4.1 开始:

非函数、非数组类型 T 的左值可以转换为纯右值

所以我们声明一个变量x

 int x = 42;
Run Code Online (Sandbox Code Playgroud)

此范围内的表达式x现在是左值(因此也是左值)。它满足 4.1 中左值到右值转换的要求。

将左值到右值转换应用于表达式的上下文的典型示例是什么x

bil*_*llz 5

prvalue(“纯”右值)是标识临时对象(或其子对象)的表达式,或者是不与任何对象关联的值。

\n\n
struct Bar\n{\n    int foo()\n    {\n        int x = 42;\n        return x;    // x is converted to prvalue\n    }\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

该表达式bar.foo()纯右值

\n\n

或者

\n\n

Lambda 表达式,例如

\n\n
[](int x){return x*x;}\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xc2\xa7 3.10.1

\n\n

右值 (\xe2\x80\x9cpure\xe2\x80\x9d 右值) 是不是 x 值的右值。[ 示例:调用返回类型不是引用的函数的结果是纯右值。诸如 12、7.3e5 或 true 之类的文字值也是纯右值。\xe2\x80\x94结束示例]

\n\n

参见n3055

\n