जैसा कि पहले ही कहा गया है, यह संभव है, लेकिन आप को देखने के लिए 'गिरावट के माध्यम से इस में'checheme। यदि पहली कोशिश-पकड़-ब्लॉक में आपका अपवाद पकड़ा जाता है, तो यह बाहरी पकड़-ब्लॉक द्वारा पकड़ा नहीं जाएगा। हालांकि अगर यह आंतरिक कैच-ब्लॉक द्वारा पकड़ा नहीं जाता है, तो यह बाहरी पकड़-ब्लॉक में एक मिलान अपवाद-हैंडलर खोजने का प्रयास करेगा।
आप अपने आंतरिक अपवाद-हैंडलर में throw;
का उपयोग करके अगले अपवाद-हैंडलर को अपवाद भी स्पष्ट रूप से बढ़ा सकते हैं।
उदाहरण के लिए इस कोड:
try
{
try
{
throw std::runtime_error("Test");
}
catch (std::runtime_error& e)
{
std::cerr << "Inner Exception-Handler: " << e.what() << std::endl;
throw;
}
}
catch (std::exception& e)
{
std::cerr << "Outer Exception-Handler: " << e.what() << std::endl;
}
में परिणाम होगा:
Inner Exception-Handler: Test
Outer Exception-Handler: Test
इसका कारण यह है std::runtime_error is derived from std::exception काम करता है। आपको यह भी ध्यान रखना चाहिए कि इस तरह के एक छोटे उदाहरण में एक दूसरे के बाद पकड़-ब्लॉक लिखना भी संभव है, लेकिन यदि आप पहले पकड़-ब्लॉक के बाद अन्य कोड निष्पादित करना चाहते हैं तो आपको उन्हें घोंसला करना होगा।
स्रोत
2009-02-16 15:09:06
आपको इन लोगों से प्यार करना होगा जो सोचते हैं कि वे सभी की तुलना में अधिक स्मार्ट हैं और सोचते हैं कि वे इस वेबसाइट के मालिक हैं –
मैं आमतौर पर इन प्रकार के प्रश्नों को संदेह का लाभ देता हूं: सिर्फ इसलिए कि यह आपके कंपाइलर पर काम करता है इसका मतलब यह नहीं है कि यह हिस्सा है मानक के। इसका उलटा भी सच है। – rmeador
@Shoosh इस सवाल ने इसे देखने से कम से कम 90 सेकंड बचाया! –