2012-07-20 25 views
9

मैंने कुछ समय पहले SO question में असाधारण वाक्यविन्यास देखा है।इस वाक्यविन्यास का अर्थ क्या है?

class B{ 
    A a; 
    public: 
     B() try : a() {} catch(string& s) { cout << &s << " " << s << endl; }; 
}; 

समारोह के बाहर इस कोशिश-पकड़ ब्लॉक का अर्थ क्या है?

उत्तर

10

यह फ़ंक्शन ब्लॉक करने का प्रयास करें। व्युत्पन्न कक्षाओं रचनाकारों में पकड़ त्रुटियों के लिए केवल सी-टोर में उपयोगी। आप मानक में इस सुविधा के बारे में अधिक पढ़ सकते हैं उदाहरण के लिए n3337 ड्राफ्ट पैरा। 15, 15.1।

4 एक समारोह-कोशिश ब्लॉक सहयोगियों ctor-प्रारंभकर्ता के साथ एक हैंडलर-सेक, यदि मौजूद है, और यौगिक बयान। एक अपवाद कंपाउंड-स्टेटमेंट के निष्पादन के दौरान या रचनाकारों और विनाशकों के लिए, कक्षा के उप-प्रोजेक्ट के क्रमशः क्रमशः विनाश के दौरान, को एक फ़ंक्शन-प्रयास-ब्लॉक में एक हैंडलर पर नियंत्रण स्थानांतरित करता है एक के रूप में जिस तरह से अन्य हैंडलर को एक प्रयास-ब्लॉक हस्तांतरण नियंत्रण निष्पादन के दौरान फेंक दिया गया अपवाद। [उदाहरण:

int f(int); 
class C { 
int i; 
double d; 
public: 
C(int, double); 
}; 
C::C(int ii, double id) 
try : i(f(ii)), d(id) { 
// constructor statements 
} 
catch (...) { 
// handles exceptions thrown from the ctor-initializer 
// and from the constructor statements 
} 

अंत उदाहरण]

+1

अधिक गहराई से स्पष्टीकरण और तर्क के लिए http://www.drdobbs.com/introduction-to-function-try-blocks/184401297 देखें। – pmr

+0

वाह .. इससे पहले कभी नहीं देखा गया ... उत्तर के लिए धन्यवाद – PermanentGuest

+0

@PermanentGuest यह सुविधा शायद ही कभी उपयोग की जाती है, क्योंकि आपके कैच ब्लॉक अपवाद के अंत में कुछ अन्य अपवाद फेंकने पर, पुनर्स्थापित किया जाएगा। फ़ंक्शन-ट्राई-ब्लॉक अपवाद नहीं ले सकता है। – ForEveR

0

यह एक निर्माता से फेंका जब एक सदस्य वस्तु बनाने अपवाद फैल जाती है। आपके द्वारा उल्लिखित प्रश्नों में से एक में विवरणों को समझाते हुए एक लिंक है: http://www.gotw.ca/gotw/066.htm

संबंधित मुद्दे