gpt4 book ai didi

c++ - 在复制初始化中是否返回对本地对象未定义行为的引用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:39 25 4
gpt4 key购买 nike

考虑以下代码:

struct foo
{
foo(foo const&) = default; // To make sure it exists
};

foo& get_local_foo_reference()
{
foo my_local_foo;
return my_local_foo; // Return a reference to a local variable
}

int main()
{
foo my_foo = get_local_foo_reference();
}

现在每个人都会同意返回对局部变量的引用是不好的并且会导致未定义的行为。

但在 copy initialization 的情况下(如上代码所示)参数是一个常量左值引用,所以它应该是一个reference initialization。参数,它延长了引用的生命周期。

这是有效的,还是仍然是未定义的行为?

最佳答案

生命周期扩展仅适用于限制为 const 引用或 r-value 引用的临时对象。 (temporary 不能绑定(bind)到非 const 左值引用)

就算临时返回也是UB:

const foo& create_foo() { return foo{}; } // Also UB

来自 http://eel.is/c++draft/class.temporary#6.10 :

The lifetime of a temporary bound to the returned value in a function return statement is not extended; the temporary is destroyed at the end of the full-expression in the return statement.

关于c++ - 在复制初始化中是否返回对本地对象未定义行为的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50746407/

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