ऐसा क्यों है सी ++ में अनुमति नहीं है?
जब तक आप इसे परिभाषित नहीं करते हैं, तब तक वेरिएबल एल-वैल्यू नहीं बनता है।
कॉन्स्ट सदस्यों को प्रारंभ करने की अनुमति क्यों दी जाती है?
इस मामले में भी, यदि आप चर के पते को लेने जा रहे हैं तो एक परिभाषा आवश्यक है।
9.4.2 स्टेटिक डेटा सदस्यों
एक स्थिर डेटा की घोषणा अपने वर्ग परिभाषा सदस्य एक परिभाषा नहीं है और एक अधूरा सीवी के अलावा अन्य प्रकार की हो सकती है - योग्य शून्य। की परिभाषा एक स्थिर डेटा सदस्य नामस्थान स्कोप में सदस्य की कक्षा परिभाषा को संलग्न करेगा। नामस्थान स्कोप की परिभाषा में, स्थिर डेटा सदस्य का नाम योग्यता से ऑपरेटर का उपयोग करके अपने वर्ग के नाम से योग्य होगा। एक स्थिर डेटा सदस्य की परिभाषा में प्रारंभकर्ता अभिव्यक्ति अपने वर्ग
इसके अलावा के दायरे में है, यह मुख्य रूप से एक उपयोग विरूपण साक्ष्य है, ताकि आप लिख सकते हैं:
class S {
static const int size = 42;
float array[ size ];
};
करता है इसका मतलब है सी ++ में स्थिर चर 0 में के साथ शुरू नहीं किया गया है?
नहीं वे हैं:
गैर स्थानीय चर स्थिर भंडारण अवधि (3.7.1) या धागा भंडारण अवधि (3.7 के साथ
चर के
3.6.2 प्रारंभ। 2) zeroinitialized किया जाएगा (8.5) से पहले किसी अन्य प्रारंभ जगह लेता है।
हालांकि चीजें सी ++ 0x में थोड़ा और अधिक कठिन हो जाती हैं। सभी शाब्दिक प्रकार अब प्रारंभ किया जा सकता है जो मतलब यह होगा कि सभी अदिश प्रकार (तैरता शामिल) (के रूप में वर्तमान मानक में केवल अभिन्न प्रकार के खिलाफ) और कुछ वर्ग प्रकार अब घोषणा में एक प्रारंभकर्ता का उपयोग कर प्रारंभ किया जा सकता है।
महान उत्तर के लिए धन्यवाद, आपने मुझे मेरे सिर से मेरी सुनवाई खींचने से रोका! मेरे पास एक सवाल है, क्या संदर्भ सदस्यों को परिभाषित करते समय शून्य सूचक की आपूर्ति करने का कोई संभावित तरीका है? –
@TimVisee सुनिश्चित नहीं हैं कि अगर यह संभव है - कम से कम एक पोर्टेबल, गैर यूबी तरह से - लेकिन आप गलत संदर्भ में पहुंचते हैं। यदि आप नल सेमेन्टिक्स चाहते हैं तो बस एक पॉइंटर का उपयोग करें या शायद बूस्ट वैकल्पिक जैसे कुछ का उपयोग करें। –