这个临时参考文献能保存足够长的时间吗
Does this temporary reference survive long enough?
在中
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中有更多内容,尤其是该规则的例外情况。
我看不出当它返回你遗漏的...
时会发生什么,但我想你并没有问这个问题。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 从持续时间构造std::chrono::system_clock::time_point
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 使用 ctime 保存新时间点会覆盖旧字符串?
- 仅将纪元字符串保存到 mysql 日期时间年/月/日,但没有小时分钟秒
- C++ 如何使用字符串中保存的文件路径创建带时间戳的目录
- 如何在另一个结构中保存 GetLocalTime 时间
- 从 openCV 中保存多个帧,并以时间作为其名称
- 保存并加载二进制文件中的提升::时间::steady_clock::time_point
- 保存文件或文件夹的时间戳
- 保存未知数量的整数,而不会花费太多时间/内存
- 分支预测变量结果是否在流程使用其时间片后保存
- 这个临时参考文献能保存足够长的时间吗
- 保存调试状态以跳过长时间的计算
- 为什么保存到文件和加载的时间(NULL)和仅仅时间(NULL)是不一样的
- 使用PUGIXML反复保存大型XML文件需要花费大量时间
- C++应用程序构建时间/日期保存
- 如何在C++中保存带有日期和时间的图像文件名?