根据此文件:
http://www.stroustrup.com/terminology.pdf
关于这些我有几个问题。
一种。具有身份的x值的示例是什么?以下内容不合法:
Foo f;
&std::move(f);
b。我可以重载类Foo的&运算符,并使其返回这个,以便使以下内容合法:
&Foo(5);
但是像Foo(5)这样的PR值不能具有同一性。还是对身份有一个更微妙的解释?
最佳答案
您链接的文档包含以下两个定义:
看一下标准,我们可以收集对象的定义(根据§1.8/1)是:
根据§1.7/1:
有一个地址。这意味着定义非常广泛,几乎包含任何类型的值(rvalue,xvalue,prvalue,lvalue等)的每个对象。
该标准本身给出了生成xvalue的表达式的列表(在§5/7中):
作为后续,给出了一些例子。这是对它们的扩展:
struct A { int m; };
A&& operator+(A, A);
A a;
A b;
a + b; // xvalue
A&& f();
f(); // xvalue
f().m; // xvalue
A a;
static_cast<A&&>(a); // xvalue
std::move(a); // xvalue