c++ - function-try-block and noexcept -


निम्न कोड के लिए

  struct x {int x; एक्स () बिना किसी प्रयास का प्रयास करें: x (0) {} पकड़ (...) {}};   

दृश्य स्टूडियो 14 सीटीपी मुद्दों चेतावनी

C4297 चेतावनी: 'एक्स :: एक्स': समारोह एक अपवाद फेंक नहीं मान लिया लेकिन करता है

ध्यान दें: __declspec (nothrow), (फेंक), noexcept (सही), या noexcept समारोह पर निर्दिष्ट किया गया था

इस noexcept ? या यह माइक्रोसॉफ्ट कंपाइलर में एक बग है?

या यह माइक्रोसॉफ्ट कंपाइलर में एक बग है?

काफी नहीं।

ऐसा एक तथाकथित कार्य-प्रयास-ब्लॉक ऐसा रोक नहीं सकता है कि अपवाद बाहर निकल जाएगा। विचार करें कि ऑब्जेक्ट पूरी तरह से कभी नहीं बना है क्योंकि निर्माता निष्पादन को पूरा नहीं कर सकता है। पकड़ -block कुछ और फेंकने के लिए है या वर्तमान अपवाद rethrown किया जाएगा ([except.handle] / 15):

वर्तमान में संभाला अपवाद अगर rethrown है नियंत्रण एक निर्माता या नाशक के समारोह-कोशिश ब्लॉक के हैंडलर के अंत तक पहुँचता है।

इसलिए संकलक deduces कि निर्माता वास्तव में फेंक कर सकते हैं।

  स्ट्रेट X {int x; एक्स () बिना सीखा: x (0) {try {// कोड जो वास्तव में फेंक सकता है} पकड़ (...) {}}};   

किसी चेतावनी के बिना संकलित होना चाहिए।

Comments