आज rethrowing मैं एक catch
ब्लॉक में एक बग मिला:अपवाद प्रकार खोने जब एक कैच ब्लॉक से एक अपवाद
catch (const exception& e){
// do something
// throw e; <-- bug!
throw; // <-- right thing to do
}
मूल रूप से अगर मैं अपवाद e
स्पष्ट rethrow, मैं एक नया std::exception
का पुनर्निर्माण, में मिलता है वास्तव में what()
विधि से संदेश मेरे कस्टम निर्मित संदेश के बजाय डिफ़ॉल्ट std::string
था।
स्पष्टीकरण क्या है? मैंने सोचा कि throw;
केवल throw ExceptionJustCaught;
का एक शॉर्टेंड है।
यह मूल्य और संदर्भ के बीच का अंतर है। –
यह एक बहुत ही महत्वपूर्ण अवधारणा है जिसे अक्सर अनदेखा किया जाता है (और मेरी राय में सिंटैक्स का एक मुश्किल बिट है जिसे संकलित करते समय कम से कम चेतावनी दी जानी चाहिए ..)। महान सवाल! – NHDaly