Bunu reddit için kısa sürelerimden birinde aldım:
http://www.smallshire.org.uk/sufficientlysmall/2009/07/31/in-c-throw-is-an-expression/
Temel olarak yazar, C ++ 'da şunu belirtir:
throw "error"
bir ifadedir. Bu aslında hem ana metinde hem de dilbilgisinde C ++ Standardında oldukça açık bir şekilde ifade edilmiştir. Bununla birlikte, net olmayan şey (en azından benim için) ifadenin türü nedir? " void
" Olduğunu tahmin ettim , ancak g ++ 4.4.0 ve Comeau ile biraz deneme yapmak şu kodu verdi:
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
}
Derleyicilerin // 1 ile bir problemi yoktu ama // 2'de kustular çünkü koşullu operatördeki türler farklı. Yani bir throw
ifadenin türü geçersiz görünmüyor.
Öyleyse nedir?
Cevap verirseniz, lütfen ifadelerinizi Standart'tan alıntılarla yedekleyin.
Bu, koşullu operatörün fırlatma ifadeleriyle nasıl başa çıktığı kadar fırlatma ifadesinin türü ile ilgili olmadığı ortaya çıktı - bugünden önce kesinlikle bilmediğim bir şey. Cevap veren herkese teşekkürler, ama özellikle David Thornley'e.