मैं बनाम डिफ़ॉल्ट-initialisation मूल्य initialisation की मेरी समझ ताज़ा किया गया था, और this भर में आया था:यह सरल असाइनमेंट अपरिभाषित व्यवहार क्यों है?
struct C {
int x;
int y;
C() { }
};
int main() {
C c = C();
}
जाहिर है इस यूबी है क्योंकि
सी() के मामले में, वहाँ है एक कन्स्ट्रक्टर जो को एक्स और वाई सदस्यों को प्रारंभ करने में सक्षम है, इसलिए कोई प्रारंभिकता नहीं होती है। सी() को कॉपी करने का प्रयास करने के लिए इसलिए अपरिभाषित व्यवहार में परिणाम होता है।
मुझे लगता है कि मैं समझता हूं क्यों, लेकिन मैं निश्चित नहीं हूं। क्या कोई विस्तार से बता सकता है?
क्या इसका मतलब यह भी यूबी है?
int x; x = x;
आकस्मिक रूप से, मूल्य प्रारंभिकता के संबंध में, निम्नलिखित शून्य होने की गारंटी है?
int x = int();
सुनिश्चित नहीं है कि आपका क्या मतलब है। यदि आपका मतलब है कि x और y के मानों को अनियमित किया जाएगा तो हाँ, लेकिन आपने अपने स्वयं के प्रश्न का उत्तर दिया है (क्योंकि कन्स्ट्रक्टर इसे नहीं कर रहा है)। सी सी = सी() के लिए; मुझे लगता है कि यह पूरी तरह से मान्य है। – Sid
मैंने सोचा कि यह पूरी तरह से मान्य था, जब तक कि किसी ने दावा नहीं किया। जैसा कि मैंने इसे पढ़ा है, पहला स्निपेट केवल यूबी द्वारा ही किया जा सकता है यदि दूसरा भी है, अन्यथा यह नाक संबंधी deamons के बिना, एक साधारण अनियमित मूल्य है। – spraff
@ सिड: नहीं, एक अनियमित वस्तु के मूल्य का उपयोग करके अपरिभाषित व्यवहार देता है। –