初始化具有默認值的結構體結構是簡單的:括號(集合)初始化爲具有默認值
struct X { int a; int b = 2; };
和初始化用支架初始化一個結構是微不足道的太:
X x = {1, 3};
令人驚奇的init代碼不會編譯,直到我刪除默認值。那麼,我如何在這種情況下做init?我想讓X POD沒有C-tor。
初始化具有默認值的結構體結構是簡單的:括號(集合)初始化爲具有默認值
struct X { int a; int b = 2; };
和初始化用支架初始化一個結構是微不足道的太:
X x = {1, 3};
令人驚奇的init代碼不會編譯,直到我刪除默認值。那麼,我如何在這種情況下做init?我想讓X POD沒有C-tor。
下面是一些與問題相關的文檔:
http://en.cppreference.com/w/cpp/language/aggregate_initialization
在C++ 11中添加一個默認的初始化可以防止braced init有效。在C++ 14中,它沒有。
在C++ 11中解決您的問題的一種方法是編寫一個構造函數,其中a和b的值爲默認值。
只是FYI:與C++ 14,代碼編譯。 – Mine
記錄在這裏:http://en.cppreference.com/w/cpp/language/aggregate_initialization – Hayt
'聚合的定義被改爲顯式排除任何具有成員初始值的類;因此,他們不允許使用聚合初始化。 C++ 14放寬了此限制,允許在這些類型上進行聚合初始化。如果加載的初始化列表沒有爲該參數提供一個值,那麼成員初始化程序就會處理它,所以基本上,如果沒有C-tor,C++ 11中不可能存在代碼。只有C++ 14 –