gpt4 book ai didi

c++ - 为什么函数调用是一个 xvalue(如果返回类型是一个右值)?

转载 作者:行者123 更新时间:2023-11-28 01:21:00 25 4
gpt4 key购买 nike

假设我们有一个函数:

struct A {
int m;
};

A&& f();

据我所知的表达方式:

f();
f().m;

都是xvalue。但为什么?为什么他们不是prvalue?我有点困惑。

最佳答案

因为您是通过引用而不是值从 f 返回的。这意味着 A 的生命周期比 f() 长,例如

A&& f()
{
static A res;
return std::move(res);
}

A global;

A&& f()
{
return std::move(global);
}

但不是

A&& f()
{
return {}; // dangling reference
}

f().m; 中,m 的使用继承了前面子表达式的值类别,这是正常的成员访问。

关于c++ - 为什么函数调用是一个 xvalue(如果返回类型是一个右值)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56290668/

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