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

class Bar 
{ 
    private: 
     const int x; 
}; 

uscita:qualificatore di accesso `public` e` const`ness. `-Wuninitialized`

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

Perché Bar producono un avvertimento, ma Foo non lo fa (ovviamente a causa di qualificazione accesso, ma che cosa è la logica?).

+0

È questo l'intero programma? –

+0

Questo è il MWE completo che ho compilato. – aiao

risposta

12

Con queste definizioni, in quanto Foo::x è pubblico, si può validamente un'istanza di un Foo con qualcosa di simile:

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

o

Foo f = { 0 }; 

Non si può fare che per un Bar.

+0

Che qualche sintassi insolita (almeno per me). Potresti fornire una risorsa. – aiao

+3

@aiao Il primo è la nuova sintassi in C++ 11 (spesso chiamata male [inizializzazione uniforme] (http://en.wikipedia.org/wiki/C%2B%2B11#Uniform_initialization)) ed è equivalente alla seconda. Entrambi, in questo caso, eseguono l'inizializzazione aggregata (§8.5.1 di C++ 11). –