gpt4 book ai didi

c++ - 这个临时引用是否存在足够长的时间?

转载 作者:IT老高 更新时间:2023-10-28 22:21:17 26 4
gpt4 key购买 nike

template <typename T>
T const & foo(T const & dflt)
{ return /* ... */ ? /* ... */ : dflt; }

int x = foo(5);

在分配给 x 之前,对临时“生存”的引用是否存在?

(我知道它在 foo() 调用期间仍然存在,但分配让我犹豫)

有问题的代码在此处依赖 const 引用有一些合法用途,即我需要两个单独的函数

T const & foo_cr(T  const & dflt);
T const & foo_v(T dflt);

我想避免(仅仅依赖同名的不同签名对我来说似乎有点冒险。)

最佳答案

Does the reference to temporary "survive" until it's assigned to x?

一般来说,是的。如果 foo 返回 dflt,则该引用(对临时 5)一直有效,直到创建它的完整表达式结束,也就是说,直到初始化之后。

C++03, 12.2/3:

When an implementation introduces a temporary object of a class that has a non-trivial constructor (12.1), it shall ensure that a constructor is called for the temporary object. Similarly, the destructor shall be called for a temporary with a non-trivial destructor (12.4). Temporary objects are destroyed as the last step in evaluating the full-expression (1.9) that (lexically) contains the point where they were created. This is true even if that evaluation ends in throwing an exception.

12.2/4 和 12.2/5 中有更多内容,尤其是此规则的异常(exception)情况。

当它返回您遗漏的 ... 时,我看不到会发生什么,但我猜您并没有问这个问题。

关于c++ - 这个临时引用是否存在足够长的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9160079/

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