, जब एक एक वस्तु फेंकता है, यह स्थिर अभिव्यक्ति के प्रकार का उपयोग कर फेंक दिया है। इसलिए, अगर आप:स्थिर प्रकार फेंकने के लिए तर्क?
catch (some_exception const &e) {
// ...
throw e; // throws static type, possibly causing "slicing"; should just "throw;" instead
}
और e
वास्तव में कुछ वर्ग some_exception
से प्राप्त करने के लिए एक संदर्भ है, ऊपर throw
कारण होगा "कटा हुआ" होने के लिए वस्तु चुपचाप। हां, मुझे पता है कि सही उत्तर throw;
पर है, लेकिन जिस तरह से चीजें भ्रम और बग के अनावश्यक स्रोत की तरह लगती हैं।
इसके लिए तर्क क्या है? नहीं होगा, आप इसे गतिशील ऑब्जेक्ट के प्रकार से फेंकना चाहते हैं?
लेकिन अगर आप संदर्भ द्वारा पकड़ने, ऐसा लगता है यह बस सब पर किसी भी प्रतिलिपि कर के बिना एक ही वस्तु rethrow सकता है प्रतीत होता है (जैसे "फेंक," करता है)। –
फिर 'फेंक x;' इसके ऑपरेंड के आधार पर अलग-अलग व्यवहार करता है और क्या यह 'कैच' ब्लॉक में दिखाई देता है। 'फेंक x 'से होने का लाभ' फेंक 'से अलग है,' यह है कि 'फेंक x' का व्यवहार हमेशा समान होता है (एक प्रतिलिपि बनाई जाती है और वह प्रतिलिपि पकड़ी जाती है), लेकिन आपके पास अभी भी क्षमता है यदि आप ऐसा करना चाहते हैं तो वर्तमान अपवाद को फिर से करें। [मुझे शायद यह ध्यान रखना चाहिए कि कुछ परिस्थितियों में प्रतिलिपि को बढ़ाया जा सकता है, लेकिन केवल ऐसा करने पर, रचनाकारों और विनाशकों के आह्वान से प्रोग्राम के व्यवहार को अलग नहीं किया जाता है।] –
+1 अच्छा स्पष्टीकरण। :-) – Nawaz