例如,clang
不編譯該代碼,這是因爲,低於struct A
的缺省默認的構造,A() = default;
不被認爲是用戶提供的。默認的默認構造函數,爲什麼不是用戶提供的默認構造函數?
struct A{ A() = default; };
const A a;
但是,如果你看一下[dcl.fct.def.general]/1你會看到:
功能體:
構造函數初始化程序選擇複合語句
功能試塊
= default ;
= delete ;
也就是說,= default;
是默認的構造函數A::A()
,這是相同的話說,函數體上述定義A() = default;
相當於A(){}
爲{}
是默認構造函數的主體。
順便說一下,g++
編譯上面的代碼片段,但是我知道g++
在這方面還有其他問題,根據Jonathan Wakely的this comment。
奇怪,你說,[clang失敗](http://coliru.stacked-crooked.com/a/45816775ce659464),[gcc編譯](http://coliru.stacked-crooked.com/a/ 137a9ea1c836152b)。 VS2015也是如此。 – wally
用戶提供的顯式默認類似於struct A {A();}; A :: A()=默認;' – 0x499602D2