[英]Lifetime of a temporary object bound to a reference member in member initializer list (C++14)
[英]What is the lifetime of reference member default initializer in C++?
請考慮這個簡短的代碼示例:
#include <iostream>
struct A
{
A() { std::cout << "A() "; }
~A() { std::cout << "~A() "; }
};
struct B { const A &a = A(); };
int main()
{
B x;
std::cout << ". ";
auto y = B();
std::cout << ". ";
auto z = B{};
std::cout << ". ";
}
GCC 在這里打印( https://gcc.godbolt.org/z/a83bn54qT ):
A() ~A() . A() ~A() . A() . ~A()
這意味着A
在x
和y
初始化引用的生命周期很短,但在z
,生命周期延長到作用域結束。
您能否從 C++ 標准的角度解釋為什么會這樣?
由於代碼格式錯誤,無法保證生命周期延長。
從默認成員初始值設定項綁定到引用成員的臨時表達式是格式錯誤的。 [示例 8:
struct A { A() = default; // OK A(int v) : v(v) { } // OK const int& v = 42; // OK }; A a1; // error: ill-formed binding of temporary to reference A a2(1); // OK, unfortunately
— 結束示例]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.