在
template <typename T>
T const & foo(T const & dflt)
{ return /* ... */ ? /* ... */ : dflt; }
int x = foo(5);
Run Code Online (Sandbox Code Playgroud)
在分配给x之前,对临时的引用是否"存活"?
(我知道它在foo()调用的持续时间内存活,但是赋值让我犹豫)
有问题的代码在这里依赖于const引用有一些合法用途,即我需要两个独立的函数
T const & foo_cr(T const & dflt);
T const & foo_v(T dflt);
Run Code Online (Sandbox Code Playgroud)
我想避免(只是依赖于同名的不同签名对我来说似乎有点危险.)
jpa*_*cek 14
在分配给x之前,对临时的引用是否"存活"?
一般来说,是的.如果foo返回dflt,那个引用(到临时5)有效,直到它创建的全表达式结束,这意味着,直到初始化之后.
C++ 03,12.2/3:
当实现引入具有非平凡构造函数(12.1)的类的临时对象时,它应确保为临时对象调用构造函数.类似地,应该使用非平凡的析构函数(12.4)调用析构函数.临时对象作为评估全表达式(1.9)的最后一步被销毁,该表达式(词法上)包含创建它们的点.即使该评估以抛出异常结束,也是如此.
更多的是12.2/4和12.2/5,尤其是此规则的例外情况.
我看不出当你把...你遗漏的时候会发生什么,但我想你不是在问这个问题.
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |