2017-08-03 13 views
24

एक प्रकार के लिए दो const के साथ एक चेतावनी/त्रुटि जारी है। हालांकि अगर इस प्रकार को typedef के साथ परिभाषित किया गया है, तो संकलक इसे स्वीकार करता है (विजुअल स्टूडियो 2013 और ऑनलाइन कंपाइलर सी ++ खोल दोनों)।समान कॉन्स प्रकार क्वालीफायर

#include <iostream> 

typedef const int value_type; 

int main() 
{ 
    const value_type n = 0; //ok 
    const const int n2 = 0; //error C4114 

    return 0; 
} 

किसी को भी क्यों के रूप में एक विचार है? क्या यह const (const int) है, जो const const int से अलग है?

+1

यह कोड ठीक है, आपका प्रश्न वास्तव में क्या है? –

उत्तर

30

यह स्पष्ट typedef मामले में अनुमति दी गई है, और घोषणा अपने आप में लेने की अनुमति नहीं:

[dcl.type/1]

प्रकार-विनिर्देशक हैं:

प्रकार-विनिर्देशक: ... सीवी-क्वालीफायर
परिभाषित-प्रकार-विनिर्देश: प्रकार-विनिर्देशक

[dcl.spec/1 and 2]

विनिर्देशक कि एक घोषणा में इस्तेमाल किया जा सकता है:

डीईसीएल-विनिर्देशक: ... को परिभाषित प्रकार -स्पेसिफ़ियर ...

प्रत्येक घोषित-विनिर्देशक एक बार घोषित-विनिर्देशक-सीईसी में सबसे अधिक दिखाई देगा, सिवाय इसके कि लंबे समय तक दो बार दिखाई दे सकता है।

[dcl.type.cv/1]

वहाँ दो सीवी-क्वालिफायर, स्थिरांक और अस्थिर कर रहे हैं। प्रत्येक सीवी-क्वालीफायर एक बार सीवी-क्वालीफायर-सेक में दिखाई देगा। यदि एक सीवी-क्वालीफायर एक घोषित-विनिर्देशक-सीक में प्रकट होता है, तो घोषणा-घोषणाकर्ता-सूची या घोषणा-घोषणाकर्ता-सूची घोषणा की सूची खाली नहीं होगी। [नोट: [basic.type.qualifier] और [dcl.fct] वर्णन करते हैं कि कैसे सीवी-क्वालीफायर ऑब्जेक्ट और फ़ंक्शन प्रकारों को प्रभावित करते हैं। - अंत नोट] रिडंडेंट सीवी-योग्यता अनदेखा कर रहे हैं। [नोट: उदाहरण के लिए, इन्हें टाइपपीफ द्वारा पेश किया जा सकता है। - अंत नोट]

उपनाम टाइप करने के अलावा, एक टेम्पलेट पैरामीटर एक और मामला है जहां क्वालीफायर अनावश्यक हो सकता है। इसे अनुमति देने के लिए तर्क, अन्यथा सही घोषणाओं को तोड़ना नहीं है क्योंकि सीवी-क्वालीफायर पीछे के दरवाजे में फंस गया है।

+2

मैं प्रभावित हूं: आपने मानक याद किया ?! – Bathsheba

+0

@ बाथशेबा - केवल सूचकांक :) बाकी सब कुछ एक अस्पष्ट यादें है। – StoryTeller

+0

Thx जो मामला प्रतीत होता है।सी ++ मानक हालांकि मेरे लिए पढ़ना वाकई मुश्किल है। – gast128

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