我仰視上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