您提到的两个链接在某种意义上是不同的,一个显示使用本地 const 引用,另一个显示使用类成员 const 引用。
当我们创建本地 const 引用并引用临时对象时,在此编译器中将临时对象的寿命延长到本地 const 引用的范围。
指向临时的类成员 const 引用将导致意外结果,因为临时对象的生命周期不会超出为初始化类成员引用而调用的构造函数。正如其中一个答案中所解释的,临时文件只会在构造函数完成之前存活。
引用以下答案:
const 引用是否会延长临时对象的寿命?
生命周期扩展不能通过函数参数传递。§12.2/5 [class.temporary]:
第二个上下文是引用绑定到临时的。引用绑定到的临时对象或作为临时对象绑定的子对象的完整对象的临时对象将在引用的生命周期内持续存在,除非下面指定。临时绑定到构造函数的 ctor-initializer (§12.6.2 [class.base.init]) 中的引用成员将持续存在,直到构造函数退出。在函数调用(第 5.2.2 节 [expr.call])中临时绑定到引用参数会一直持续到包含调用的完整表达式完成为止。
如果您正确分析它,您将意识到在这两种情况下,临时的生命周期都会延长,直到初始化引用的范围有效。一旦引用的范围超出范围,临时就变得无效。
对于本地 const 引用,作用域在一个函数内部,从那里它被初始化为一个临时值。对于类成员 const 引用,范围是构造函数,它被初始化为临时值。
您还应该阅读这篇 GOTW 文章:
https ://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/