![]() |
1
2
想象一下,工厂是“聪明”的,并且做了一些类似的事情
并进一步假设
编辑:
编码指南可能会说
通过从函数中获取返回值
如果您使用
|
![]() |
2
2
脑海中浮现出一个“病理”案例:不可复制和不可移动的物体。这样一个物体 不能 按值存储,因此通过引用保存它是您唯一的机会:
在一个不那么矫揉造作的注释中,您引用了复制省略来消除“重对象”优化。但是请注意,副本省略是
可选择的
你永远不能保证编译器会这样做。将临时存储在
|
![]() |
3
2
寿命延长规则的基本原理是已知的(
because Bjarne Stroustrup, the language creator, said so
)要有统一的简单规则。特别是,在函数调用中用作实际参数的临时变量的生存期将延长到完整表达式的末尾,覆盖其绑定到的任何引用的生存期
据我所知,在C++03中有一个实际用例 invented by Petru Marginean ,用于创建未知自动推断类型的本地对象,如下所示:
这在以下情况下有效
当然,在C++11和更高版本中,通常可以使用
通过返回值优化和/或移动,这将和Marginan的技巧一样有效,而且更清晰、更简单。
然而,当类型
现在,惊喜?,类型
这是第三个用例,它只是关于不为整个对象引入其他从未使用过的名称,保持代码简单。 坚持一部分(乃至整个对象)的立场: C++15§12.2/5 [类别.临时]
例外情况包括,在函数调用中用作实际参数的临时变量会一直持续到完整表达式的末尾,即比它绑定到的任何正式参数引用稍长。
在里面
an exchange with me in the Usenet group
comp.lang.c++
.
|