तो मैं कुछ कोड लिख रहा था और मैंने देखा कि वाक्य रचनात्मक, प्रकार, और अन्य संकलन-समय त्रुटियों के अलावा, सी ++ कोई अन्य अपवाद नहीं फेंकता है। इसलिए मैं यह एक बहुत ही तुच्छ कार्यक्रम के साथ बाहर परीक्षण करने का फैसला:सी ++ अपवाद हैंडलिंग
#include<iostream>
int main() {
std::count<<5/0<<std::endl;
return 1
}
जब मैंने इसे जी ++ का उपयोग कर संकलित, जी ++ मुझे एक चेतावनी कह रहा 0. से विभाजित किया गया था लेकिन यह अभी भी कोड संकलित दे दी है। फिर जब मैंने इसे चलाया, तो उसने कुछ वास्तव में बड़ी मनमानी संख्या मुद्रित की। जब मैं जानना चाहता हूं, सी ++ अपवादों के साथ कैसे व्यवहार करता है? 0 द्वारा इंटीजर डिवीजन एक बहुत ही छोटा उदाहरण होना चाहिए जब एक अपवाद फेंक दिया जाना चाहिए और कार्यक्रम को समाप्त करना चाहिए।
क्या मुझे अनिवार्य रूप से अपने पूरे कार्यक्रम को एक विशाल प्रयास ब्लॉक में संलग्न करना है और फिर कुछ अपवादों को पकड़ना है? मुझे पाइथन में पता है जब एक अपवाद फेंक दिया जाता है, प्रोग्राम तुरंत समाप्त हो जाएगा और त्रुटि को प्रिंट करेगा। सी ++ क्या करता है? क्या यहां तक कि रनटाइम अपवाद भी हैं जो निष्पादन को रोकते हैं और कार्यक्रम को मार देते हैं?
धन्यवाद जो समझ में आता है। तो एक और सवाल है। यदि std :: cout का उपयोग करने के बजाय, मैं std :: cerr का उपयोग करता हूं, तो क्या यह अपवाद फेंक देगा, या सिर्फ त्रुटि स्ट्रीम पर प्रिंट करेगा? और अगर मैं अपना अपवाद बना देता हूं (चलो कहें foo) और मेरे कोड में मैं फेंक फू कहता हूं, क्या मेरा प्रोग्राम तुरंत मारेगा और foo.what() मुद्रित किया जाएगा? या क्या मुझे ऐसा करने के लिए स्पष्ट रूप से सी ++ बताना होगा? – user1413793
@ user1413793: यदि आप 'std :: cerr' पर लिखते हैं, तो यह केवल त्रुटि स्ट्रीम पर प्रिंट होगा। आप कमांड लाइन ('>' बनाम '2>') पर पुनर्निर्देशन के माध्यम से आउटपुट स्ट्रीम और त्रुटि स्ट्रीम को विभिन्न स्थानों पर भेज सकते हैं। यदि आप एक अपवाद फेंकते हैं, और आप इसे कहीं भी नहीं पकड़ते हैं, तो प्रोग्राम तुरंत समाप्त हो जाएगा और एक त्रुटि संदेश प्रिंट करेगा। (अधिक सटीक रूप से, 'std :: terminate' नामक फ़ंक्शन को कॉल किया जाएगा, जिसका डिफ़ॉल्ट व्यवहार प्रोग्राम को समाप्त करना और अपवाद के संदेश को प्रिंट करना है। आप' std :: set_terminate 'को कॉल करके व्यवहार को ओवरराइड कर सकते हैं। उनको देखो 'रुचि रखते हैं।) – HighCommander4