2010-08-31 45 views
11

const और volatile को सी स्पेक द्वारा cv-qualifier कहा जाता है।विनिर्देशक और योग्यता के बीच सहसंबंध?

specifier और qualifier (cv-qualifier) के बीच वास्तव में क्या कमी है? क्या एक क्वालीफायर भी एक विशिष्ट है?

क्या यह आवश्यक है कि qualifier केवल एक लवली के साथ है?

cv-qualifier के अलावा क्वालीफायर क्या हैं?

क्या मेरी उपरोक्त समझ में कोई अर्थ है?

उत्तर

6

इसमें से अधिकांश समझ में नहीं आता है।

विशिष्ट और क्वालीफायर को C++ मानक में परिभाषित किया गया है। क्वालीफायरविनिर्देशक का एक अभिन्न हिस्सा है। उदाहरण के लिए, घोषणा में टाइप विनिर्देशक टाइप कर सकते हैं सीवी-क्वालीफायर। मुझे इस विषय पर मानक से सबकुछ उद्धृत करने का कारण नहीं दिख रहा है।

सीवी-क्वालीफायर लाइब्रे तक सीमित नहीं हैं। वर्ग प्रकार के रावजूद भी सीवी-योग्य हो सकते हैं। गैर-वर्ग प्रकार के एक रावल्यू को सीवी-अर्हता प्राप्त करना संभव है, लेकिन इसका कोई प्रभाव नहीं पड़ेगा और इसे अनदेखा कर दिया जाएगा। const A* this:

const क्वालीफायर कि आप foo के साथ अपने उदाहरण में दिखाने के उपयोग सिर्फ एक वाक्यात्मक रूप है, जो वास्तव में इसका मतलब है कि स्थिरांक-क्वालीफायर foo विधि के निहित this पैरामीटर के लिए लागू किया जाता है। अर्थात। इस मामले में यह वास्तव में एक लाभार्थी अर्हता प्राप्त करता है, लेकिन यह *this है, foo नहीं।

शब्द क्वालीफायरयोग्य नाम के संदर्भ में भी प्रकट होता है। some_class::some_member (या some_namespace::some_name) जैसे नाम योग्य नाम और some_class:: भाग क्वालीफायर है।

विचार यह है कि अगर कुछ एक लालसा है तो आप इसे संशोधित कर सकते हैं यह पूरी तरह गलत है। संशोधित lvalues ​​और गैर-संशोधित लाइवल हैं। const int i = 5 के रूप में घोषित एक वस्तु एक अंतराल है, फिर भी आप इसे संशोधित नहीं कर सकते हैं। सी ++ में सामान्य कार्य भी अंतराल होते हैं, फिर भी आप किसी फ़ंक्शन को संशोधित नहीं कर सकते हैं।

+1

+1 "मुझे इस विषय पर मानक से सब कुछ उद्धृत करने का कारण नहीं दिखता है।" कभी-कभी मुझे आश्चर्य होता है कि क्या लोग सोचते हैं कि कुछ यादृच्छिक मानक उद्धरण सहित उनके उत्तर को कम गलत बना दिया गया है (मैं इस धागे के बारे में बात नहीं कर रहा हूं, लेकिन एसओ पर बहुत सारे मनोरंजक उत्तर धागे हैं, जहां दुख है)। –

+1

अरे, किसी ने साबित किया कि मैंने कल क्या दावा किया था: http://meta.stackexchange.com/questions/51469/dont-forget-to-mention-sql-injection/51474#51474 –

3

एक सीवी-क्वालीफायर एक विशिष्ट, वास्तव में एक प्रकार का विनिर्देशक है।

का हवाला देते हुए सी ++ 03 7.1:

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

decl-specifier: 
    storage-class-specifier 
    type-specifier 
    function-specifier 
    friend 
    typedef 
decl-specifier-seq: 
    decl-specifier-seq_opt 
    decl-specifier 

रहे हैं ... जबकि प्रकार विनिर्देशक परिभाषित कर रहे हैं:

type-specifier: 
    simple-type-specifier 
    class-specifier 
    enum-specifier 
    elaborated-type-specifier 
    cv-qualifier 

शब्द विनिर्देशक और योग्यता के बीच भेद के लिए:

प्रत्येक प्रकार जो एक सीवी-अयोग्य पूर्ण या अधूरा ऑब्जेक्ट प्रकार है या शून्य तीन है अपनी तरह का सीवी योग्य संस्करण इसी है: एक अस्थिर योग्य संस्करण एक स्थिरांक योग्य संस्करण,, और कॉन्स्ट-अस्थिर-योग्य संस्करण। शब्द ऑब्जेक्ट प्रकार में सीवी-क्वालीफायर शामिल हैं जब ऑब्जेक्ट बनाया गया है। की उपस्थिति में विनिर्देशक विनिर्देशक-सेक एक ऑब्जेक्ट कॉन्स-योग्य ऑब्जेक्ट प्रकार की घोषणा करता है; ऐसे ऑब्जेक्ट को कॉन्स्ट ऑब्जेक्ट कहा जाता है। में अस्थिर विनिर्देशक की उपस्थिति decl-specifier-seq अस्थिर-योग्य ऑब्जेक्ट प्रकार की ऑब्जेक्ट घोषित करती है; ऐसी ऑब्जेक्ट को अस्थिर ऑब्जेक्ट कहा जाता है। सीवी-क्वालीफायर दोनों की उपस्थिति में गिरावट-विनिर्देशक-सीईसी कॉन्स्ट-वाष्पशील-योग्य ऑब्जेक्ट प्रकार का ऑब्जेक्ट घोषित करता है; ऐसी ऑब्जेक्ट को कॉन्स अस्थिर ऑब्जेक्ट कहा जाता है। सीवी-योग्य या एक प्रकार के सीवी-अयोग्य संस्करण विशिष्ट प्रकार हैं; हालांकि, वे में समान प्रतिनिधित्व और संरेखण आवश्यकताओं होंगे।

हालांकि यह स्पष्ट रूप से नहीं बताया गया है, उपरोक्त पैराग्राफ अंतर दिखाता है। मैं मानता हूं कि परिभाषाएं अधिक सख्त हो सकती हैं।

+1

सटीक उत्तर के लिए धन्यवाद। पैराग्राफ में आप उद्धृत करते हैं कि मैं दोनों शब्दों के मिश्रित उपयोग से उलझन में था: "... एक घोषित ** विनिर्देशक ** की उपस्थिति ** विनिर्देशक-सीईसी ... ... अस्थिर ** विनिर्देशक की उपस्थिति ** एक घोषित-विनिर्देशक-सीईसी ... ... ** सीवी-क्वालीफायर ** दोनों की उपस्थिति एक घोषणा-निर्दिष्टकर्ता में ... "। और चूंकि इस पैराग्राफ के पास कोई व्याकरण परिभाषा नहीं है, यह स्पष्ट नहीं है कि "कॉन्स्ट" और "अस्थिर" विनिर्देशक या क्वालीफायर हैं (या क्वालीफायर विनिर्देशक या इसके विपरीत का विशिष्ट मामला है)। एक बार फिर धन्यवाद। –