Ausnahmebehandlung in C ++: Bei Verwendung von "throw (int)" ein Double werfen

8

Das folgende Programm gibt immer "Error: double 10.2" aus.

Ich verstehe nicht warum. Laut mir, wenn fun1 () erlaubt nur Int geworfen werden, sollte das Programm entweder (1) Absturz (2) oder ändere das Double zu einem int und wirf es dann. Das heißt, die Ausgabe sollte "Error: int 10" sein. Dies ist jedoch nicht der Fall. Kann mir jemand erklären?

%Vor%     
user1414696 20.06.2013, 13:48
quelle

2 Antworten

9

Ihr Compiler ist nicht standardkonform. Gemäß Standard sollte Ihr Programm mit dem Aufruf von std::unexpected enden, nachdem Sie double Ausnahme-Escaped fun1 erlaubt haben. .
Das heißt - keine Ausnahmespezifikationen verwenden. Sie sind veraltet und nutzlos.

    
Tadeusz Kopec 20.06.2013, 13:55
quelle
3

MSVC behandelt throw(int) als Bedeutung einfach "kann alles werfen", dh entspricht throw(...) , siehe Ausnahmespezifikationen (MSDN)

Dies entspricht nicht dem C ++ 03-Standard, ist aber tatsächlich nützlicher als das C ++ 03-Verhalten und liegt näher am Geist des C ++ 11-Standards.

In C ++ 11 throw(X) ist veraltet, die neue Form der Ausnahmespezifikation ist noexcept und kann noexcept(true) oder noexcept(false) sein, was throw() und throw(...) entspricht, was alles MSVC ist unterstützt.

Wenn Sie die alten Ausnahmebedingungen verwenden möchten, verwenden Sie einfach throw() , um "nicht werfen" zu sagen, und nichts oder throw(...) , um "werfen" zu sagen, und verwenden Sie nicht throw(X) . Das wird konsistent in C ++ 03 und C ++ 11 und über alle Compiler funktionieren.

    
Jonathan Wakely 20.06.2013 14:39
quelle

Tags und Links