Hier ist, was wirtry {....} catch (..) nur dann, wenn eine bestimmte Kompilierung Ausdruck wahr ist
try {
std::uninitialized_copy(...);
} catch(...) {
if(!boost::has_trivial_destructor<T>::value) {
// some cleanup to do here...
}
throw;
}
Wir fragen uns, ob die try/catch hat Kosten zu tun versuchen, wenn Die Kompilierzeitkonstante in if
ist falsch.
Kann der Compiler innerhalb seiner "as-if" -Rechte den try catch entfernen und sich so verhalten, als ob der std::uninitialized_copy
Aufruf ohne try
um ihn herum erschienen wäre?
Oder ist in den C++ - Spezifikationen etwas versteckt, das den Compiler benötigt, um es hier zu lassen? Stellen Sie sich als Beispiel eine hypothetische surrounding_try_blocks()
-Funktion vor, die die dynamische umgebende Anzahl von try-Blöcken um einen Frame zurückgibt.
Könnten Sie bitte Ihre question.Like erarbeiten, wenn Sie „sagen, tut try/catch mit Kosten verbunden ist ... "Welche Kosten meintest du? Lediglich das Setzen von Try/Catch-Blöcken hat einige Performance-Kosten. – ravi
Wenn ich die Frage verstehe, dann ist es: if 'boost :: ...'ist wahr, dann könnte der Code bis auf den Aufruf von 'unitialized_copy' optimiert werden, da er nur eine Exception abfängt und sie dann erneut auslöst. Aber darf ein Compiler diese Optimierung vornehmen? – Tommy
Wenn der Compiler die if-Anweisung optimiert, funktioniert Ihr Programm genauso wie ohne die try/catch-Blöcke, nein? Ich sehe also nicht, welchen Overhead der Compiler für die Optimierung hätte. –