从概念上讲,以下内容并不违反我的意见。但这是被禁止的。
struct A
{
int a;
int b;
int c;
};
struct B
{
int a;
int b;
private:
int c;
};
int main (int argc, char * argv[])
{
auto a = A{1,2,3}; //ok
auto b = A{1,2}; //ok
auto c = B{1,2,3}; //error
auto d = B{1,2}; //error
return 0;
}
添加手动构造函数将允许私有成员的大括号初始化。但聚合和pods的美妙之处在于你需要的少量编码,因此这很烦人。
另一方面,this is a privacy breach in my opinion但标准允许这样做。
答案 0 :(得分:3)
没有私有或受保护的非静态数据成员的聚合。聚合的所有非静态数据成员都必须是公共的。
private:
int c;
导致B
不再是聚合。因此聚合初始化不再起作用。