第一个有自动生成默认构造函数吗?为什么第二个不可以编译通过?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
第一個有自動產生預設建構子嗎?
有,當一個類別內沒有任何使用者定義的建構函式的時候,編譯器會產生預設建構子。參見 Default constructors。
為什麼第二個不可以編譯通過?
如果一個類別想要使用大括號列表的方式,進行成員初始化,那麼這個類別必須滿足 aggregate class 的條件。而在 aggregate class 的條件中,有一條是
類別不包含任何類別內初始化器(in-class initializer)。
在題主的第二個例子類別的定義中,成員a和b都使用了 in-class initializer,所以不是 aggregate class,所以不能使用
a
b
NoDefault y = {2, 2};
的方式初始化。
註:根據 aggregate initialization 所述,此條件在C++17中將被刪除。
有,當一個類別內沒有任何使用者定義的建構函式的時候,編譯器會產生預設建構子。參見 Default constructors。
如果一個類別想要使用大括號列表的方式,進行成員初始化,那麼這個類別必須滿足 aggregate class 的條件。而在 aggregate class 的條件中,有一條是
在題主的第二個例子類別的定義中,成員
a
和b
都使用了 in-class initializer,所以不是 aggregate class,所以不能使用的方式初始化。
註:根據 aggregate initialization 所述,此條件在C++17中將被刪除。