spr*_*aff 7 c++ const reference object-lifetime
这是输出,F~但我期待~F
#include <iostream>
struct Foo {
int _x;
operator const int & () const {return _x;}
~ Foo () {std :: cout << "~";}
};
void foo (const int &)
{
std :: cout << "F";
}
int main ()
{
foo (Foo ());
}
Run Code Online (Sandbox Code Playgroud)
我把它构建为一个反例,表明最重要的const是一个例外而不是规则.它通常写成
当const引用绑定到临时引用时,该临时值的生存期将延长到引用的生命周期
我试图说明,虽然Foo()是临时的,_x转换运算符返回的引用不是,并且上面的代码是不安全的.
但是输出似乎证明了这个例子是安全的,临时的生命周期Foo()是由对其成员之一的const引用的存在而扩展的.
这是正确的吗?标准中的哪个指定了?
关于临时性的一般规则是,当他们完全表达时,他们的生命就会结束(非正式地,到达时;).
12.2临时物体
3 / [...]临时对象被作为评估全表达式(1.9)的最后一步而被销毁,该表达式(词法上)包含创建它们的点.即使该评估以抛出异常结束,也是如此.销毁临时对象的值计算和副作用仅与完整表达相关联,而不与任何特定子表达相关联.