从概念上看,我认为以下内容不会侵犯隐私。但是它是被禁止的。
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;
}
添加一个手动构造函数可以允许对私有成员使用大括号初始化。但聚合体和 POD 的美妙之处在于你只需要很少的编码,因此这很麻烦。
另一方面,在我看来,这是一种隐私泄露,但这是标准允许的。
struct B
使用聚合初始化,因为它不是一个聚合类型(所有非静态成员变量必须是公有的才能构成聚合类型)。 - Jerry Coffinclass A { int a; public: int b; }; A a{1};
这样的情况该如何处理呢?你会使用1
来初始化A::a
还是A::b
呢?无论哪种选择都会让很多人感到不满和困惑。 - Jerry Coffin