আমি এটিকে পুনর্বিবেচনার জন্য আমার একটি সংক্ষিপ্ত বিবরণে তুলেছি:
http://www.smallshire.org.uk/sufficientlysmall/2009/07/31/in-c-throw-is-an-expression/
মূলত, লেখক সি ++ এ এটি উল্লেখ করেছেন:
throw "error"
একটি অভিব্যক্তি। এটি মূলত মূল পাঠ্য এবং ব্যাকরণ উভয়ই সি ++ স্ট্যান্ডার্ডে মোটামুটি স্পষ্টভাবে বর্ণিত। তবে, যা পরিষ্কার নয় (আমার কাছে কমপক্ষে) তা প্রকাশের ধরণটি কী? আমি " void
" অনুমান করেছি , তবে জি ++ ৪.৪.০ এবং কমেউ এই কোডটি পেয়েছি :
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
প্রকাশের ধরণটি বাতিল মনে হয় না।
তো এটা কি?
যদি আপনি উত্তর দেন, দয়া করে স্ট্যান্ডার্ডের উদ্ধৃতি সহ আপনার বিবৃতি ব্যাক আপ করুন।
শর্তসাপেক্ষ অপারেটরটি থ্রো এক্সপ্রেশনগুলির সাথে কীভাবে আচরণ করে - এটি কোনও থ্রো এক্সপ্রেশনের ধরণের সম্পর্কে এতটা না হয়ে ওঠে - এমন কিছু যা আমি অবশ্যই আগে জানতাম না। যারা প্রতিক্রিয়া জানিয়েছিল তাদের সবাইকে, বিশেষত ডেভিড থর্নলেকে ধন্যবাদ।