Perché ci dovrebbe essere un successo nelle prestazioni? Eseguono esattamente la stessa funzionalità di C cast. L'unica differenza è che registrano più errori in fase di compilazione e sono più facili da cercare nel codice sorgente.
static_cast<float>(3)
equivale esattamente a (float)3
e genera esattamente lo stesso codice.
dato un float f = 42.0f
reinterpret_cast<int*>(&f)
è esattamente equivalente a (int*)&f
, e genererà esattamente lo stesso codice.
E così via. L'unico cast che differisce è dynamic_cast
, che, sì, può generare un'eccezione. Ma è perché fa cose che il cast in stile C non può fare. Quindi non utilizzare dynamic_cast
a meno che non sia necessaria la sua funzionalità.
In genere è sicuro assumere che gli scrittori di compilatori siano intelligenti. Date due espressioni diverse che hanno la stessa semantica secondo lo standard, di solito è sicuro assumere che saranno implementate in modo identico nel compilatore.
Oops: il secondo esempio deve essere reinterpret_cast, non dynamic_cast, ovviamente. Risolto adesso
Ok, giusto per rendere assolutamente chiaro, qui è quello che dice il ++ standard C:
§5.4.5:
Le conversioni eseguite da
- un
const_cast
(5.2 .11)
- a
static_cast
(5.2,9)
- a
static_cast
, seguita da una const_cast
- un
reinterpret_cast
(5.2.10), o
- un
reinterpret_cast
seguito da un const_cast
.
può essere eseguita utilizzando la notazione getto di conversione di tipo esplicita. Si applicano le stesse restrizioni semantiche e i comportamenti . Se una conversione può essere interpretata in più di uno dei modi elencati sopra, l'interpretazione viene visualizzata per la prima volta nell'elenco , anche se il cast risultante da è mal interpretato.
Quindi, se nulla, dal momento che il cast di tipo C è implementata in termini di C++ getta, calchi in stile C dovrebbe essere più lento . (ovviamente non lo sono, perché il compilatore genera lo stesso codice in ogni caso, ma è più plausibile che lo stile del C++ sia più lento.)
Potrei dover aggiungere una taglia a questo ... è così che sono interessato. –
Hai già avuto due risposte precise (se lo dico io stesso). –
Le risposte correnti indicano che lo stile statico C++ non ha un impatto sulle prestazioni in fase di esecuzione. Qualcuno potrebbe commentare o aggiungere qualche spiegazione sul perché avrebbero la stessa performance? (La domanda è volutamente vaga.) –