2008-12-02 10 views
16

इस कोड को अपरिभाषित व्यवहार की ओर जाता है:क्या गोटो और विनाशक संगत हैं?


void some_func() { 
    goto undefined; 
    { 
    T x = T(); 
    undefined: 
    } 
} 

निर्माता कहा जाता है नहीं है।

लेकिन इस कोड के बारे में क्या? क्या एक्स के विनाशक को बुलाया जाएगा? मुझे लगता है कि यह होगा, लेकिन मैं निश्चित होना चाहता हूँ। :)


void some_func() { 
    { 
    T x = T(); 
    goto out; 
    } 
    out: 
} 
+0

पहला कोड नमूना अपरिभाषित व्यवहार का कारण नहीं बनता है, यह अवैध है और संकलित नहीं होगा। –

+0

"संकलित नहीं होगा" अपरिभाषित व्यवहार का एक उदाहरण है, मुझे लगता है। पुस्तक जिसे मैं पढ़ रहा हूं अब "अपरिभाषित व्यवहार" कहता है। –

+2

दोनों तकनीकी रूप से अलग हैं: यदि कंपाइलर को प्रोग्राम को अस्वीकार करने की आवश्यकता है, तो प्रोग्रामर के पीओवी से कुछ "कम बुरा" होता है जो संकलित हो सकता है और जब यह चलता है तो अपने घर को आग लगाना पड़ता है। कुछ कंपाइलर्स उन चीज़ों को अस्वीकार करते हैं जो कानूनी हैं लेकिन जो संकलक जानता है वह अनिर्धारित होगा। –

उत्तर

42

हाँ, विनाशकर्ता की उम्मीद के रूप में ही कहा जाएगा, जैसे कि आप जल्दी एक अपवाद के कारण दायरे से बाहर निकल गया।

स्टैंडर्ड 6.6/2 (कूद बयान):

गुंजाइश (हालांकि पूरा किया), विनाशकर्ता, स्वत: भंडारण अवधि के साथ सभी का निर्माण वस्तुओं है कि उस क्षेत्र में घोषित किया गया है के लिए कहा जाता है उलटे क्रम में से बाहर निकलने पर उनकी घोषणा का।

+0

उस पर मानक से एक उद्धरण मिला है? –

संबंधित मुद्दे