我仰视上cppreference.com lifetime of a temporary,我发现的东西从C++ 14改变在构件初始化列表绑定到一个基准部件的临时对象的:寿命(C++ 14)
每当引用绑定到一个临时的或到的 临时基类子对象,临时的寿命延长到 寿命的基准的匹配,但有以下例外:
...
一个临时的参考构造函数初始值设定项列表中的e成员仅在构造函数退出前持久存在,而不存在于对象存在时的 。 (注:如初始化形成不良的DR 1696 )(直到C++ 14)
我检查的标准真的没有这样的说法。 ($ 12.2/5临时对象[class.temporary])
这是否意味着从C++ 14临时绑定到引用成员的生命周期将扩展到对象的生命周期?
我试过下面的代码,GCC和CLANG都看起来不是,临时会在构造函数结束时被销毁。
#include <iostream>
struct X {
~X() { std::cout << "X dtor\n"; }
};
struct Y {
Y() : x_(X()) { std::cout << "Y ctor\n"; }
const X& x_;
~Y() { std::cout << "Y dtor\n"; }
};
int main()
{
Y y;
std::cout << "Hello, world!\n";
}
结果:
Y ctor
X dtor
Hello, world!
Y dtor
难道我误会了?
您是否阅读过[缺陷报告](http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1696)? – NathanOliver
**是**(您误解了它) – Walter