Ответ 1
С этими определениями, поскольку Foo::x
является общедоступным, вы можете достоверно создать экземпляр Foo
с чем-то вроде:
Foo f { 0 }; // C++11
или
Foo f = { 0 };
Вы не можете сделать это для Bar
.
class Foo
{
public:
const int x;
};
class Bar
{
private:
const int x;
};
Вывод:
test.cpp:10:13: warning: non-static const member ‘const int Bar::x’ in class without a constructor [-Wuninitialized]
Почему Bar
создает предупреждение, но Foo
не делает (очевидно, из-за квалификатора доступа, но что такое логика?).
С этими определениями, поскольку Foo::x
является общедоступным, вы можете достоверно создать экземпляр Foo
с чем-то вроде:
Foo f { 0 }; // C++11
или
Foo f = { 0 };
Вы не можете сделать это для Bar
.