दिलचस्प पोस्ट
क्या अन्यथा से प्राप्त या अधिक सुरक्षित है? जावा में कक्षा <टी> का उपयोग कैसे करें? जेएक्स-आरएस में प्रतिक्रिया हैडर कैसे सेट करें ताकि उपयोगकर्ता एक्सेल के लिए डाउनलोड पॉपअप को देख सके? मैप के लिए कोई ज़रूरत नहीं क्यों है डिस्पेचटिप्रॉप फ़ंक्शन यहाँ? जावा के साथ सेलेनियम वेबड्रायवर का प्रयोग करके टैब स्विच करें रोमन अंक को दशमलव में रूपांतरित करना मेरे पास पूर्णांकों की एक सरणी है, मैं प्रत्येक एक mysql क्वेरी में (php में) कैसे उपयोग करूँ? TableView में JavaFX गुण ट्रेलो को उपयोगकर्ता के क्लिपबोर्ड का उपयोग कैसे होता है? एंड्रॉइड में मैं एक बिंदीदार / धराशायी रेखा कैसे बना सकता हूं? क्या एक तैयार कथन से ऑटोइन्किमेंट आईडी को पुनर्प्राप्त करने का कोई तरीका है? दिलचस्प "रेफरी के पैरामेज" सुविधा, कोई भी कामकाज? सी # में एक अच्छा थ्रेडसेफ एकलटन सामान्य टेम्पलेट पैटर्न क्या है मैं हमेशा टीएफएस में एक विशिष्ट फाइल की जांच कैसे रोक सकता हूं WPF में कई शैलियों को कैसे लागू करें

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

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

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

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

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 करेगा।

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

वेब के समाधान से एकत्रित समाधान "मूल्य प्रारंभ और गैर पीओडी प्रकार"

विजुअल स्टूडियो सभी मौजूदा संस्करणों (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 में तय किया गया है। मूल्य इनिशियलाइजेशन अब मानक में परिभाषित के रूप में काम करता है।