我想我缺少关于左值到右值标准转换的一些基本内容。
从 C++11 4.1 开始:
非函数、非数组类型 T 的左左值可以转换为纯右值
所以我们声明一个变量x
:
int x = 42;
这个范围内的表达式x
现在是一个左值(所以也是一个左值)。它满足 4.1 中关于左值到右值转换的要求。
将左值到右值转换应用于表达式的上下文的典型示例是x
什么?
prvalue(“纯”右值)是标识临时对象(或其子对象)的表达式,或者是不与任何对象关联的值。
struct Bar
{
int foo()
{
int x = 42;
return x; // x is converted to prvalue
}
};
表达式bar.foo()
是纯右值。
或者
Lambda 表达式,例如
[](int x){return x*x;}
§ 3.10.1
prvalue(“纯”右值)是不是 xvalue 的右值。[ 示例:调用返回类型不是引用的函数的结果是纯右值。诸如 12、7.3e5 或 true 之类的文字的值也是纯右值。—结束示例]
见n3055。