`public` и 'const`ness. `-Wuninitialized`

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 не делает (очевидно, из-за квалификатора доступа, но что такое логика?).

Ответ 1

С этими определениями, поскольку Foo::x является общедоступным, вы можете достоверно создать экземпляр Foo с чем-то вроде:

Foo f { 0 }; // C++11

или

Foo f = { 0 };

Вы не можете сделать это для Bar.