दिलचस्प पोस्ट
प्रोग्रामिंग पी 2 पी आवेदन हाइबरनेट में मॉडल से तालिका नाम प्राप्त करें विंडोज में जेएनए कुंजीपटल हुक आईओएस जुड़े प्रमाणीकरण एसवीजी आईएमजी तत्व अनुपात में यानी 9 में सम्मानित नहीं है स्प्राइट किट और कलर विथ प्रतिमान छवि क्या Git submodule के रूप में एक मर्कुरियल रिपॉजिटरी का उपयोग करने का कोई तरीका है? जावा का बिगडिस्कीबल। पॉवर (बिगडीकेमिल एक्सपोनेंट): क्या जावा लाइब्रेरी है जो यह करता है? मैं कैसे इकाई ढांचे में शून्य मूल्यों के लिए क्वेरी कर सकते हैं? जावा में एक सूचक और एक संदर्भ चर के बीच अंतर क्या है? सेटटैमआउट लूप को कैसे रोकें? .NET – आप एक सरणी में "कैप्स" सीमांकित स्ट्रिंग कैसे विभाजित कर सकते हैं? फोनस्टेट लास्टनर जोड़ें क्या ग्रहण में लाइन-रैप है jquery UI combobox ONCHANGE

मूल्य प्रारंभ और गैर पीओडी प्रकार

एक घंटे पहले मैंने एक जवाब पोस्ट किया जो मेरे अनुसार सही था। हालांकि मार्टिन बी ने मेरा जवाब घटा दिया था उसने कहा

आप सिर्फ भाग्यशाली हैं और शून्य प्राप्त कर रहे हैं क्योंकि मुझे जो स्मृति में रखा गया था वह शून्य-प्रारंभिक रूप से हुआ। यह मानक द्वारा गारंटी नहीं है

हालांकि यहां माइकल बुर के उत्तर को पढ़ने और निम्नलिखित नमूना कोड की कोशिश करने के बाद

1)

#include <cassert> struct B { ~B(); int m; }; int main() { B * b = new B(); assert(b->m == 0); } 

मुझे एमएसवीसी ++ 2010 पर डीबग त्रुटि मिली

जब मुझे निम्नलिखित कोड [एमएसवीसी ++ 2010] पर मेरा जवाब मिला, तो मुझे एक समान त्रुटि मिली

2)

 #include <cassert> struct Struct { std::string String; int Int; bool k; // add add add }; struct InStruct : Struct { InStruct() : Struct() {} }; int main() { InStruct i; assert(ik == 0); } 

न तो (1) और (2) ने जीसीसी / क्लेग पर ऐसी कोई त्रुटि नहीं दी जिसके कारण मुझे लगता है कि यदि एमएसवीसीसी ++ 2010 सी ++ 03 का समर्थन नहीं करता है मुझे यकीन नहीं है।

माइकल बुर के पोस्ट [सी ++ 03 में] के अनुसार

नया बी () – मूल्य-इनिइशियल बी जो सभी फ़ील्ड शून्य-आरम्भ करता है क्योंकि इसकी डिफ़ॉल्ट सीटीओआर उपयोगकर्ता-परिभाषित के विपरीत उत्पन्न संकलक है

मानक कहते हैं

प्रकार के एक वस्तु के मूल्य-प्रारंभ करने के लिए Tmeans:

– यदि टी उपयोगकर्ता-घोषित कन्स्ट्रक्टर (12.1) के साथ एक क्लास प्रकार (9। 9) है, तो टी के लिए डिफॉल्ट कन्स्ट्रक्टर (और प्रारंभिक रूप से गलत तरीके से बनाया गया है यदि कोई सुलभ डिफॉल्ट कन्स्ट्रक्टर नहीं है);

…..

अन्यथा, वस्तु शून्य-आरंभीकृत है

पहले बिंदु से यदि कोई उपयोगकर्ता घोषित डिफॉल्ट कन्स्ट्रक्टर नहीं है तो कंपाइलर संश्लेषित डिफॉल्ट कन्स्ट्रक्टर को कहा जाएगा जो सभी क्षेत्रों को zero initialize करने के लिए zero initialize (अंतिम बिंदु के अनुसार) को zero initialize करेगा।

तो मैं कहाँ हूँ? क्या मूल्य प्रारंभिकता की मेरी व्याख्या सही है?

Solutions Collecting From Web of "मूल्य प्रारंभ और गैर पीओडी प्रकार"

विजुअल स्टूडियो सभी मौजूदा संस्करणों (2005, 2008, 2010) में बगों को जानते हैं, जहां यह गैर-पीओडी प्रकारों के लिए मूल्य-आरंभीकरण को सही ढंग से लागू नहीं करता है, जिनके पास उपयोगकर्ता घोषित कन्स्ट्रक्टर नहीं है।

भाषा नियमों के अनुसार आप में से कोई भी आग्रह नहीं कर रहा है लेकिन संकलक मुद्दों को प्रदर्शित करना चाहिए। ये कुछ बग रिपोर्ट हैं, ध्यान दें कि वे "फिक्स नहीं होंगे" के रूप में सभी बंद हैं या हल किए गए हैं।

http://connect.microsoft.com/VisualStudio/feedback/details/564268/c-value-initialization

http://connect.microsoft.com/VisualStudio/feedback/details/484295/vc-does-not-value-initialize-members-of-derived-classes-without-user-declared-constructor

http://connect.microsoft.com/VisualStudio/feedback/details/100744/value-initialization-in-new-expression

ऐसे लोगों के लिए जो इस प्रश्न पर 2015 में ठोकर खाते हैं, मेरे जैसे:

उपरोक्त सभी मुद्दों को वी.एस. 2015 में तय किया गया है। मूल्य इनिशियलाइजेशन अब मानक में परिभाषित के रूप में काम करता है।