这个临时参考文献能保存足够长的时间吗

Does this temporary reference survive long enough?

本文关键字:时间 保存 参考文献      更新时间:2023-10-16

在中

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);

这是我想避免的(仅仅依靠相同名称的不同签名对我来说似乎有点风险。)

对临时"生存"的引用是否一直存在,直到它被分配给x?

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

C++0312.2/3:

当实现引入类的临时对象时有一个非平凡的构造函数(12.1),它应确保为临时对象调用构造函数。类似地析构函数应被调用为具有destructor(12.4)。临时对象在评估(词汇上)包含创建它们的点。这是真的,即使评估最终引发异常。

12.2/4和12.2/5中有更多内容,尤其是该规则的例外情况。

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