2008-10-16 19 views

उत्तर

30

"कॉन्स्ट क्लास" का क्या अर्थ है? ऐसा लगता है कि ठीक है।

मेरे लिए यह नहीं है। मुझे लगता है कि आपका कंपाइलर सिर्फ विनम्र और अनदेखा कर रहा है।

संपादित करें: हाँ, वीसी ++ चुपचाप कॉन्स्ट को अनदेखा करता है, जीसीसी शिकायत करता है।

+3

मैं कहने जा रहा हूं कि यह एक बढ़त के मामले की तरह दिखता है कि वीसी ++ गलत हो रहा है –

+0

ऐसा लगता है; 'कॉन्स' मुझे जो भी मिल सकता है उसे प्रभावित नहीं करता है। –

+0

वीसी ++ वास्तव में बहुत बीमार गठित कोड (मैं अब 2013 का उपयोग कर रहा हूँ) digest। ऐसा लगता है कि उन्होंने सिर्फ खुश पथों के लिए इसका परीक्षण किया। – ubik

17

यदि आप था यह:

तो यह स्पष्ट रूप से मतलब यह होगा कि 'एक' स्थिरांक है। अन्यथा, मुझे लगता है कि यह अमान्य सी ++ की संभावना है।

+0

सी ++ की अच्छी पुरानी भूल गई विशेषताएं! मुझे लगता है कि सी में बहुत पहले आप इस तरह की चीजें कर रहे हैं। –

41

const कि उदाहरण में कोई मतलब नहीं है, और अपने संकलक आप एक त्रुटि देना चाहिए, लेकिन अगर आप इसका इस्तेमाल बंद करने } और ; के बीच उस वर्ग के चर घोषित करने के लिए है, तो const के रूप में, उदाहरण के लिए ऐसे मामलों को परिभाषित करता है कि:


const class A 
{ 
public: 
    int x, y; 
} anInstance = {3, 4}; 

// The above is equivalent to: 
const A anInstance = {3, 4}; 
+2

मुझे यह त्रुटि बनाने के लिए कोई औचित्य नहीं मिल रहा है। कंपाइलर्स इच्छा पर चेतावनियां उत्सर्जित कर सकते हैं, लेकिन केवल मानक निर्धारित करता है कि त्रुटि के रूप में क्या मायने रखता है। – MSalters

+0

क्योंकि आप कुछ ऐसी कॉन्स के रूप में घोषित कर रहे हैं जो नहीं है। यह ऐसा कुछ है जो आप कभी नहीं करना चाहते हैं, और इसलिए एक त्रुटि होनी चाहिए। मानक निर्धारित करना चाहिए कि क्या सही है; हर गलत चीज को परिभाषित करना बहुत अधिक काम होगा। – Bernard

+0

मुझे लगता है कि मानक में इस्तेमाल किया जाने वाला शब्द "विकृत" है। मानक यह नहीं कहता कि क्या अनुमति नहीं है, केवल वही है। यह मान्य सी ++ वाक्यविन्यास नहीं है, इसलिए इसकी अनुमति नहीं है। – KeithB

7

यह व्यर्थ है जब तक आप इस उदाहरण के रूप में बाद में वर्ग का एक उदाहरण का ऐलान करते हैं:

const // It is a const object... 
class nullptr_t 
{ 
    public: 
    template<class T> 
     operator T*() const // convertible to any type of null non-member pointer... 
    { return 0; } 

    template<class C, class T> 
    operator T C::*() const // or any type of null member pointer... 
    { return 0; } 

    private: 
    void operator&() const; // Can't take address of nullptr 

} nullptr = {}; 

एक अंतरिमयदि आप सी ++ 0x की प्रतीक्षा कर रहे हैं तोकार्यान्वयन।

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