По моему мнению, следующее концептуально не нарушает конфиденциальность. Но это запрещено.
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;
}
Добавление ручного конструктора позволит инициализировать фигурные скобки для закрытых членов. Но красота агрегатов и модулей заключается в том, что вам нужно небольшое количество кода, поэтому это раздражает.
С другой стороны, на мой взгляд, это нарушение конфиденциальности, но это разрешено стандартом.
struct B
, потому что это не агрегат (все нестатические члены агрегата должны быть общедоступными). - person Jerry Coffin   schedule 25.01.2018class A { int a; public: int b; }; A a{1};
Используете ли вы1
для инициализацииA::a
илиA::b
? Любой выбор оставит изрядное количество людей расстроенными и/или сбитыми с толку. - person Jerry Coffin   schedule 25.01.2018