दिलचस्प पोस्ट
एक्सएमएल स्कीमा: एट्रिब्यूट वाले एट्रिब्यूट्स में केवल टेक्स्ट वाले हैं? एंड्रॉइड में साझाभाषा का उपयोग करके मैं छवियों को कैसे स्टोर कर सकता हूं? AppCompat ActionBarActivity के साथ स्थिति पट्टी रंग बदलें AngularJS छिपा क्षेत्र मान नहीं भेजता है सीतनिद्रा में होना, @ स्यूजेन्स जनरेटर और आवंटन आकार क्या आईफ्रेम अतिप्रवाह से मूल फ्रेम पर सामग्री रखने का एक तरीका है? शब्दकोश में अधिकतम मूल्य के साथ कुंजी हो रही है? कोनेरी 2 घटक में बाहरी सीएसएस शैली लोड करें जब आप thread.start () के बजाय java के thread.run () को कॉल करेंगे? जावा आयात कैसे काम करता है? जावा 7 कोड को जावा 7 जेवीएम पर चलाने के लिए संकलित किया जा सकता है? सर्वर पर जर्सी लॉग कैसे प्राप्त करें? क्या आपको कभी भी 'जावास्क्रिप्ट:' को ऑनक्लिक में निर्दिष्ट करने की ज़रूरत है? सी libcurl एक स्ट्रिंग में आउटपुट मिलता है उनके सूचकांक को जानने के कई तत्वों तक पहुंचें

निम्नलिखित वाक्यांशों का क्या अर्थ है सी ++: शून्य-, डिफ़ॉल्ट- और मूल्य-आरंभीकरण?

निम्नलिखित वाक्यांशों का क्या अर्थ है C ++:

सी + + डेवलपर को उनके बारे में क्या पता होना चाहिए?

वेब के समाधान से एकत्रित समाधान "निम्नलिखित वाक्यांशों का क्या अर्थ है सी ++: शून्य-, डिफ़ॉल्ट- और मूल्य-आरंभीकरण?"

एक बात समझने की बात यह है कि 'मूल्य-आरंभीकरण' सी ++ 2003 मानक के साथ नया है – यह मूल 1998 मानक में मौजूद नहीं है (मुझे लगता है कि यह एकमात्र अंतर है जो स्पष्टीकरण से अधिक है) मानक से सीधे परिभाषाओं के लिए किरिल वी। Lyadvinsky का जवाब देखें।

इन प्रकार के प्रारंभ के विभिन्न व्यवहार पर विवरण के लिए operator new के व्यवहार के बारे में यह पिछले उत्तर देखें और जब वे (और जब वे सी ++ 98 से सी + 03 03 से भिन्न होते हैं) में किक करते हैं:

  • क्या प्रकार के नाम के बाद कोष्ठक नए के साथ एक अंतर बनाते हैं?

उत्तर का मुख्य बिंदु यह है:

कभी-कभी नए ऑपरेटर द्वारा लौटायी जाने वाली मेमोरी को आरम्भ किया जाएगा, और कभी-कभी यह निर्भर नहीं होगा कि आप जिस प्रकार का नवीनीकरण कर रहे हैं वह एक पीओडी है, या यदि यह एक क्लास है जिसमें पीओडी सदस्य हैं और एक कंपाइलर-डिफॉल्ट कन्स्ट्रक्टर का प्रयोग कर रहे हैं ।

  • सी ++ 1998 में 2 प्रकार के प्रारंभिककरण हैं: शून्य और डिफ़ॉल्ट
  • सी ++ 2003 में तीसरे प्रकार के आरंभीकरण, वैल्यू इनिशियलाइजेशन जोड़ा गया था।

वे कम से कम कहने के लिए, यह जटिल नहीं है और जब विभिन्न तरीकों को किक करते हैं तो सूक्ष्म होते हैं।

एक बात निश्चित रूप से पता चलेगी कि एमएसवीसी वीएस 2008 (वीसी 9 या सीएल। एक्सई संस्करण 15.एक्स) में भी सी + + 98 नियमों का पालन करता है।

निम्नलिखित स्निपेट से पता चलता है कि एमएसवीसी और डिजिटल मार्स सी + + 98 नियमों का पालन करते हैं, जबकि जीसीसी 3.4.5 और कमू सी ++ 03 नियमों का पालन करते हैं:

 #include <stdio.h> #include <string.h> #include <new> struct A { int m; }; // POD struct B { ~B(); int m; }; // non-POD, compiler generated default ctor struct C { C() : m() {}; ~C(); int m; }; // non-POD, default-initialising m int main() { char buf[sizeof(B)]; memset( buf, 0x5a, sizeof( buf)); // use placement new on the memset'ed buffer to make sure // if we see a zero result it's due to an explicit // value initialization B* pB = new(buf) B(); //C++98 rules - pB->m is uninitialized //C++03 rules - pB->m is set to 0 printf( "m is %d\n", pB->m); return 0; } 

सी ++ 03 मानक 8.5 / 5:

शून्य प्रकार के ऑब्जेक्ट को शून्य करने के लिए इसका अर्थ है:
– यदि टी एक स्केलर प्रकार (3. 9) है, तो ऑब्जेक्ट को 0 (शून्य) के मूल्य में सेट किया जाता है जिसे टी में परिवर्तित किया जाता है;
– यदि टी एक गैर-यूनियन वर्ग प्रकार है, प्रत्येक गैर-स्टेटस डेटा सदस्य और प्रत्येक बेस-क्लास सबोबैक्ट शून्य-आरंभीकृत है;
– यदि टी यूनियन का प्रकार है, तो ऑब्जेक्ट का पहला नामित डेटा सदस्य शून्य-आरम्भिक है;
– यदि टी एक सरणी प्रकार है, तो प्रत्येक तत्व शून्य-प्रारंभिक है;
– यदि टी एक संदर्भ प्रकार है, तो कोई आरंभीकरण नहीं किया जाता है।

किसी प्रकार के ऑब्जेक्ट को डिफ़ॉल्ट रूप से प्रारंभ करने के लिए इसका अर्थ है:
– यदि टी एक गैर-पीओडी वर्ग प्रकार (खंड 9) है, तो टी के लिए डिफॉल्ट कन्स्ट्रक्टर को (और यदि टी में कोई पहुंच बनाने वाला डिफॉल्ट कन्स्ट्रक्टर नहीं है तो आरम्भिकरण बेकार है);
– यदि टी एक सरणी प्रकार है, तो प्रत्येक तत्व डिफ़ॉल्ट रूप से प्रारंभ किया जाता है;
– अन्यथा, वस्तु शून्य-आरंभीकृत है।

प्रकार टी के ऑब्जेक्ट को प्रारंभ करने के लिए मूल्य का अर्थ है:
– यदि टी उपयोगकर्ता-घोषित कन्स्ट्रक्टर (12.1) के साथ एक क्लास प्रकार (9। 9) है, तो टी के लिए डिफॉल्ट कन्स्ट्रक्टर को बुलाया जाता है (और यदि टी में कोई पहुंच बनाने वाला डिफॉल्ट कन्स्ट्रक्टर नहीं है तो आरम्भिकरण बेकार है);
– यदि टी उपयोगकर्ता-घोषित कन्स्ट्रक्टर के बिना एक गैर-यूनियन वर्ग प्रकार है, तो टी के प्रत्येक गैर-स्थिर डेटा सदस्य और बेस-क्लास घटक मूल्य-प्रारंभिक है;
– यदि टी एक सरणी प्रकार है, तो प्रत्येक तत्व मूल्य-प्रारंभिक है;
– अन्यथा, वस्तु शून्य-आरंभीकृत है

एक प्रोग्राम जो डिफ़ॉल्ट-आरंभीकरण या संदर्भ प्रकार के एक इकाई के मान-आरंभीकरण के लिए कॉल करता है, वह गलत तरीके से बनता है। यदि टी एक सीवी-योग्य प्रकार है, तो टी के सीवी-अयोग्य संस्करण को शून्य-प्रारंभिक रूप से परिभाषित करने, डिफ़ॉल्ट-प्रारंभिक और मूल्य-प्रारंभिक रूप से उपयोग किया जाता है।