2013-03-25 11 views
12
class Foo 
{ 
    public: 
     const int x; 
}; 

class Bar 
{ 
    private: 
     const int x; 
}; 

wyjściowa:"publiczny" kwalifikator dostępu i "const". `-Wuninitialized`

test.cpp:10:13: warning: non-static const member ‘const int Bar::x’ in class without a constructor [-Wuninitialized] 

Dlaczego Bar produkować ostrzeżenie ale Foo nie (oczywiście z powodu dostępu eliminacjach, ale jaka jest logika?).

+0

Czy to cały program? –

+0

To jest kompletny MWE, który skompilowałem. – aiao

Odpowiedz

12

Z tych definicji, ponieważ Foo::x jest publiczny, można ważnie instancji Foo z czymś takim:

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

lub

Foo f = { 0 }; 

Nie można tego zrobić za pomocą Bar.

+0

Ta nietypowa składnia (przynajmniej dla mnie). Czy mógłbyś podać zasób? – aiao

+3

@aiao Pierwszą z nich jest nowa składnia w C++ 11 (często źle nazwana [uniform inicjalizacja] (http://en.wikipedia.org/wiki/C%2B%2B11#Uniform_initialization)) i jest odpowiednikiem drugiego. Oba w tym przypadku wykonują agregacyjną inicjalizację (§ 8.5.1 C++ 11). –

Powiązane problemy