मैंने इसे अपने संक्षिप्त विवरणों में से एक में उठाया है:
http://www.smallshire.org.uk/sufficientlysmall/2009/07/31/in-c-throw-is-an-expression/
मूल रूप से, लेखक बताते हैं कि C ++ में:
throw "error"
अभिव्यक्ति है। यह वास्तव में मुख्य पाठ और व्याकरण दोनों में सी ++ मानक में स्पष्ट रूप से स्पष्ट रूप से वर्तनी है। हालाँकि, जो स्पष्ट नहीं है (मेरे लिए कम से कम) वह क्या है जो अभिव्यक्ति का प्रकार है? मैंने अनुमान लगाया " void
", लेकिन जी ++ 4.4.0 और कोमू के साथ प्रयोग करने के एक बिट ने इस कोड को उत्पन्न किया:
void f() {
}
struct S {};
int main() {
int x = 1;
const char * p1 = x == 1 ? "foo" : throw S(); // 1
const char * p2 = x == 1 ? "foo" : f(); // 2
}
संकलकों को // 1 के साथ कोई समस्या नहीं थी, लेकिन // 2 पर बारफेड किया गया क्योंकि सशर्त ऑपरेटर के प्रकार अलग-अलग हैं। तो एक throw
अभिव्यक्ति का प्रकार शून्य नहीं लगता है।
तो यह क्या है?
यदि आप जवाब देते हैं, तो कृपया मानक से उद्धरणों के साथ अपने बयान वापस लें।
यह थ्रो एक्सप्रेशन के प्रकार के बारे में इतना अधिक नहीं बताया गया कि सशर्त ऑपरेटर थ्रो एक्सप्रेशनों से कैसे निपटता है - ऐसा कुछ जो मैं निश्चित रूप से आज से पहले नहीं जानता था। उन सभी के लिए धन्यवाद जिन्होंने उत्तर दिया, लेकिन विशेष रूप से डेविड थॉर्नले को।