2013-12-12 25 views
19

एक दोस्त ने मुझसे पूछा कि समझाने के लिए क्योंइस स्थिरांक स्थिरांक स्थिरांक घोषणा मान्य

const const const const const int const i = 0; 

मान्य सिंटैक्स है क्यों है। मैंने इस विषय पर कोई विचार करने से इंकार कर दिया। हालांकि मैं उत्सुक हूं कि यह सिर्फ एक व्याकरण की बात है?

संपादित करें। टैग सी ++ है, मेरा दोस्त जीसीसी का संदर्भ दे रहा था, इसलिए मुझे शायद सी टैग जोड़ना चाहिए।

+4

[। यह नहीं है] (http://coliru.stacked-crooked.com/a/77773912987e1506) –

+0

@GuilhermeBernal, विषय टैग है सी ++ , सी -1 – lucas92

+3

@ कोनराड नहीं। यह वैध सी है लेकिन अवैध सी ++ है। (हटाने का इरादा नहीं था) –

उत्तर

28

n1256 से:

6.7.3/4

ही quali फाई एर ही विशिष्ट एर-quali फाई एर-सूची में एक से अधिक बार दिखाई देता है, या तो सीधे या एक या अधिक typedefs के माध्यम से, व्यवहार वही है जैसे यह केवल एक बार दिखाई देता है।

सी ++ में, यह एक त्रुटि देनी चाहिए।

सी ++ 03 मानक से:

7.1.5/1 [dcl.type]

एक सामान्य नियम के रूप में, सबसे एक प्रकार-विनिर्देशक पर पूरा decl- में अनुमति दी है एक घोषणा के विनिर्देशक-सीक। के लिए केवल अपवाद इस नियम हैं:

- कॉन्स या अस्थिर किसी अन्य प्रकार-विनिर्देशक के साथ जोड़ा जा सकता है। हालांकि, टाइपिफ (7.1.3) या टेम्पलेट प्रकार के तर्क (14.3) के उपयोग के माध्यम से पेश किए जाने के अलावा, अनावश्यक सीवी-क्वालीफायरों को प्रतिबंधित किया जाता है, इस स्थिति में अनावश्यक सीवी-क्वालीफायरों को अनदेखा कर दिया जाता है।

N3797 (सी ++ 11) से:

7.1.6/2 [dcl.type]

एक सामान्य नियम के रूप में, सबसे एक प्रकार-विशिष्ट एर पर में अनुमति दी है घोषणा की पूरी घोषणा-विशिष्टता-सीमा या एक प्रकार-विशिष्ट एफआईआर-सीईसी या पीछे-प्रकार-विशिष्ट एफआईआर-सीईसी में। इस नियम का एकमात्र अपवाद हैं निम्नलिखित:

— const can be combined with any type specifier except itself. 
+0

'और' के साथ, मुझे विश्वास है। 'typedef int & t; typedef t & u; 'का अर्थ होगा' u' और' t' समान प्रकार हैं। (हालांकि शाब्दिक '&& 'सावधान रहें, यह सी ++ 11 है) –

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