यहां सेटअप है।यदि मैं "फेंक" का उपयोग करता हूं तो क्या होता है फेंकने के अपवाद के बिना?
मैं एक सी ++ प्रोग्राम है जो कई कार्य कहता है, जो सभी के संभावित एक ही अपवाद सेट फेंक है, और मैं एक समारोह में अपवाद के लिए समान व्यवहार जैसे प्रिंट त्रुटि संदेश & चाहते (डिफ़ॉल्ट करने के लिए सभी डेटा को रीसेट अपवाद के लिए; बस अपवाद के लिए प्रिंट करें; अन्य सभी अपवादों के लिए साफ़ रूप से बंद करें)।
ऐसा लगता है जैसे मैं एक निजी समारोह जो केवल त्रुटि rethrows कॉल करने के लिए पकड़ व्यवहार स्थापित करने के लिए सक्षम होना चाहिए, और इसलिए की तरह कैच करता है,:
void aFunction()
{
try{ /* do some stuff that might throw */ }
catch(...){handle();}
}
void bFunction()
{
try{ /* do some stuff that might throw */ }
catch(...){handle();}
}
void handle()
{
try{throw;}
catch(anException)
{
// common code for both aFunction and bFunction
// involving the exception they threw
}
catch(anotherException)
{
// common code for both aFunction and bFunction
// involving the exception they threw
}
catch(...)
{
// common code for both aFunction and bFunction
// involving the exception they threw
}
}
अब, क्या हुआ अगर होता "संभाल" अपवाद वर्ग के बाहर कहा जाता है। मुझे पता है कि यह कभी नहीं होना चाहिए, लेकिन मुझे आश्चर्य है कि व्यवहार C++ मानक द्वारा अपरिभाषित है या नहीं।
इसे समाप्त कर दिया जाता है, लेकिन आप मुझे क्या करना चाहते हैं ?, इस प्रोग्राम को निष्पादित करने के लिए आपको एक कंपाइलर प्रदान करता है ताकि आप परिणाम सत्यापित कर सकें। –
सभी संकलक इसे संकलित करेंगे। और यह संकलित होगा, क्योंकि किसी उपयोगकर्ता को चेतावनी देने के लिए हैंडल की * परिभाषा * के बारे में कुछ भी नहीं है कि उसे निश्चित रूप से लोड अपवाद की आवश्यकता होगी। कंपाइलर आपको अपरिभाषित व्यवहार के बारे में बहुत उपयोगी नहीं बता सकते हैं, विशेष रूप से ऐसा कुछ जो रन-टाइम तक नहीं उठाया जाएगा। – deworde