gpt4 book ai didi

c++ - 警告 : returning reference to local temporary object

转载 作者:行者123 更新时间:2023-11-28 01:52:44 32 4
gpt4 key购买 nike

编译以下内容:

namespace platform {
struct event {};
struct keyboard_event : public event {};

const platform::event& wait_event()
{
return platform::keyboard_event();
}
}

int main(int argc, const char* argv[])
{
const platform::event& event = platform::wait_event();
return 0;
}

用 clang 发出以下警告

main.cc:7:12: warning: returning reference to local temporary object [-Wreturn-stack-address]
return platform::keyboard_event();
^~~~~~~~~~~~~~~~~~~~~~~~~~

这是有道理的,但 C++11 中的新措辞似乎暗示返回对值的 const 引用会延长它的生命周期,直到引用超出范围?

我无法加载当前草稿,因此我将改为引用 cppreference.com:

The lifetime of a temporary object may be extended by binding to a const lvalue reference or to an rvalue reference (since C++11), see reference initialization for details.

最佳答案

不,“返回引用”不会神奇地延长任何生命周期。

唯一延长生命周期的时间是纯右值(或指代纯右值成员的亡值)绑定(bind)到引用变量,并且纯右值的生命周期延长至变量的:

struct Foo{};

{
const auto & r = Foo{}; // Foo object not destroyed at semicolon...
// ...
}
// ... but is destroyed only here.

您的纯右值未绑定(bind)到任何变量,因此不会延长生命周期。

(另请注意,考虑到这一点,非静态类数据成员不算作“变量”,因此如果您的类碰巧有引用成员,您也不能通过构造函数初始化列表来延长生命周期。)

关于c++ - 警告 : returning reference to local temporary object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42330303/

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