![](/img/trans.png)
[英]Why does a user-provided default constructor lead to an uninitialized member?
[英]A defaulted default constructor, why is it not a user-provided default constructor?
例如, clang
不編譯此代碼,因為,下面的struct A
的默認默認構造struct A
, A() = default;
不被視為用戶提供。
struct A{ A() = default; };
const A a;
但如果你看[dcl.fct.def.general] / 1,你會看到:
函數體:
ctor-initializer opt 復合語句
功能試塊
= default ;
= delete ;
也就是說, = default;
是默認構造函數A::A()
的函數體 ,它與定義A() = default;
上面等價於A(){}
因為{}
是默認構造函數的主體。
順便說一句, g++
編譯上面的代碼片段,但我知道g++
在這方面有其他問題,根據Jonathan Wakely的評論 。
因為標准是這樣說的( [dcl.fct.def.default] / 5 ):
如果函數是用戶聲明的,並且在第一個聲明中未明確默認或刪除,則用戶提供該函數。
這樣做可以讓你用= default;
維護triviality屬性= default;
。 否則,沒有辦法給另一個構造函數的類一個普通的默認構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.