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

class Bar 
{ 
    private: 
     const int x; 
}; 

आउटपुट:'सार्वजनिक' पहुंच योग्यता और `const`ness। `-Wuninitialized`

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

क्यों Bar एक चेतावनी का उत्पादन लेकिन Foo नहीं करता है (जाहिर है पहुँच क्वालीफायर की वजह से, लेकिन तर्क क्या है?)।

+0

क्या यह पूरा कार्यक्रम है? –

+0

यह पूर्ण एमडब्ल्यूई है जिसे मैंने संकलित किया है। – aiao

उत्तर

12
उन परिभाषाओं के साथ

, के बाद से Foo::x सार्वजनिक है, तो आप वैध की तरह कुछ के साथ एक Foo का दृष्टांत कर सकते हैं:

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

या

Foo f = { 0 }; 

आप ऐसा नहीं कर सकते एक Bar के लिए।

+0

कि कुछ असामान्य वाक्यविन्यास (कम से कम मेरे लिए)। क्या आप एक संसाधन प्रदान कर सकते हैं। – aiao

+3

@aiao पहला सी ++ 11 में नया वाक्यविन्यास है (अक्सर बुरी तरह से नामित [वर्दी प्रारंभिक] (http://en.wikipedia.org/wiki/C%2B%2B11#Uniform_initialization)) और दूसरे के बराबर है। वे दोनों, इस मामले में, समग्र प्रारंभ (§8.5.1 सी ++ 11) प्रदर्शन करते हैं। –

संबंधित मुद्दे