Ecco quello che stiamo cercando di faretry {....} catch (..) solo se una certa espressione fase di compilazione è vero
try {
std::uninitialized_copy(...);
} catch(...) {
if(!boost::has_trivial_destructor<T>::value) {
// some cleanup to do here...
}
throw;
}
ci chiediamo se il try/catch ha un costo, se la costante di tempo di compilazione nello if
è falsa.
È possibile che il compilatore con i propri diritti "as-if" rimuova il tentativo e si comporti come se la chiamata std::uninitialized_copy
fosse visualizzata senza try
attorno ad esso?
Oppure c'è qualcosa nascosto nelle specifiche C++ che richiede al compilatore di lasciarlo qui? Ad esempio, immagina un'ipotetica funzione surrounding_try_blocks()
che restituisce il conteggio dei blocchi di prova dinamici che circondano attualmente attorno a un fotogramma.
La prego di elaborare la vostra question.Like quando dici "fa try/catch ha un costo ... ". Che costo intendevi? Il solo mettere i blocchi try/catch ha un certo costo in termini di prestazioni – ravi
Se ho capito la domanda, è: if 'boost :: ...'è vero quindi il codice potrebbe essere ottimizzato fino alla semplice chiamata a' unitialized_copy' dato che tutto ciò che cattura fa un'eccezione e poi la lancia di nuovo. Ma un compilatore è autorizzato a fare questa ottimizzazione? – Tommy
se il compilatore ottimizza la dichiarazione if il tuo programma funziona esattamente come farebbe senza i blocchi try/catch, no? Quindi, non vedo quale sovraccarico ci sarebbe rimasto per il compilatore da ottimizzare. –