gpt4 book ai didi

c++ - 来自类成员访问表达式的 xvalue?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:33 27 4
gpt4 key购买 nike

所以我读了这个answer因为我对何时将值视为 xvalue 感到困惑,例如当值即将到期/接近其生命周期结束时。可悲的是,我仍然很困惑。

无论如何,引文包括:

  • a class member access expression designating a non-static data member of non-reference type in which the object expression is an xvalue, or

  • a .* pointer-to-member expression in which the first operand is an xvalue and the second operand is a pointer to data member.

答案中还包含一个示例,但它没有示例(我猜)“一个 .* 指向成员的指针表达式,其中第一个操作数是一个 xvalue,第二个操作数是一个指向数据成员的指针。 ",所以有人可以给我看一个吗?

但是,在执行 f().mm 是一个即将结束的 xvalue/rvalue 这一事实对我来说很有意义,因为 f() 返回一个右值引用。但是 a 是一个左值,所以如果您执行 a.m 会怎么样,那不仍然是一个左值吗?

这里令人困惑的是,这个成员访问表达式仍然指定一个非引用类型的非静态数据成员。或者当说“其中对象表达式是一个 xvalue”时,它是否意味着类对象必须是右值?

回答中提到的例子:

struct A {
int m;
};

A&& operator+(A, A);
A&& f();
A a;
A&& ar = static_cast<A&&>(a);

最佳答案

a class member access expression designating a non-static data member of non-reference type in which the object expression is an xvalue

“类成员访问表达式”(即 A.B 形式的表达式)由两部分组成,一个对象表达式(之前的部分>., A)和成员(member)标识(.之后的部分, B).

因此,只有当.之前的部分是一个xvalue时,本段才适用。

涉及 .* 的示例与仅涉及 . 的示例非常相似:

struct A {
int m;
};
int A::* p = &A::m;
A&& f();

std::cout << f().*p;

表达式 f().*p 是一个 xvalue。

关于c++ - 来自类成员访问表达式的 xvalue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44780161/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com