【发布时间】:2017-06-27 12:20:17
【问题描述】:
所以我读了这个answer,因为我对何时将值视为 xvalue 感到困惑,例如当一个值即将到期/接近其生命周期结束时。可悲的是,我还是很迷茫。
不管怎样,报价单包括了这个:
一个类成员访问表达式,指定一个非引用类型的非静态数据成员,其中对象表达式是 xvalue,或
.* 指向成员的表达式,其中第一个操作数是 xvalue,第二个操作数是指向数据成员的指针。
答案中还包含一个示例,但它没有举例说明(我猜)“一个 .* 指向成员的表达式,其中第一个操作数是 xvalue,第二个操作数是指向数据成员的指针。 ",那么谁能给我看一个?
但是,当执行f().m 和m 是一个xvalue 时,它确实举例说明了“指定非引用类型的非静态数据成员的类成员访问表达式,其中对象表达式是一个xvalue” /an rvalue 即将结束对我来说很有意义,因为 f() 返回一个 rvalue 引用。但是a是一个左值,那么如果你做了a.m,那不还是一个左值吗?
这里的困惑是这个成员访问表达式仍然指定了一个非引用类型的非静态数据成员。或者当说“其中对象表达式是一个xvalue”时,它是否意味着类对象必须是右值?
答案中提到的例子:
struct A {
int m;
};
A&& operator+(A, A);
A&& f();
A a;
A&& ar = static_cast<A&&>(a);
【问题讨论】:
标签: c++