2015-01-07 188 views
1

考慮以下結構:C++均勻初始化用默認值

struct A 
{ 
    int i; 
}; 

struct B 
{ 
    int i = 0; 
}; 

爲什麼可以初始化使用統一的初始化類型A的對象,我不能初始化類型B的對象?

A a{1}; 
B b{1}; //ill formed 

當默認值用於初始化成員時,編譯器在做什麼?

回答

8

在C++ 11中,B由於對非靜態數據成員具有相同的初始值設定項而不是聚合。這意味着除非提供合適的構造函數,否則不能使用大括號初始化器。

這個限制在C++ 14中已經放寬了。在該標準中,B是一個聚合,並且初始化是有效的。