सी या सी ++ की तुलना में डी के उत्सुक पहलुओं में से एक यह है कि वैरिएबल डिफ़ॉल्ट रूप से प्रारंभ किए जाते हैं जब असाइनमेंट मान प्रदान नहीं किया जाता है।अनावश्यक डिफ़ॉल्ट प्रारंभिकरण छोड़े गए हैं?
int foo() {
int o; // int.init == 0
o++;
return o; // returns 1
}
C और C++, जो केवल संभावित कचरा के साथ चर छोड़ देता है के विपरीत, डी सुनिश्चित करें कि कचरा चर के लगभग सभी प्रकार से पढ़ा कभी नहीं रही है। हालांकि, इस सरल, केवल hypothetical समारोह पर विचार, r
i
पर सेट होने से पहले कभी नहीं पढ़ा जाता है, और यह निश्चित है कि असाइनमेंट अंततः होगा।
int foo2(int n) {
assert(n > 0 && n < 20);
int r;
for (int i = n ; ; i+=7) {
if (i % 3 == 0) {
r = i;
break;
}
}
return r;
}
- एक मामले में जहां यह निश्चित है कि एक चर, पिछले एक पढ़ने के बिना भविष्य में परिभाषित किया जाएगा डिफ़ॉल्ट प्रारंभ अभी भी क्या होगा, मानक के अनुसार?
- क्या यह डीएमडी/जीडीसी कंपाइलर्स से उन्हें ऑप्टिमाइज़ करने के लिए जाना जाता है (जैसे, डिफ़ॉल्ट प्रारंभिकरण को छोड़कर जब उस डिफ़ॉल्ट मान को चर से कभी नहीं पढ़ा जाता है)?
- यदि उपर्युक्त में से कोई भी नहीं है, तो क्या पर एक पूरी तरह से अनियमित वैरिएबल है?