Cast regolare vs. static_cast vs. dynamic_cast
Scrivo codice C e C++ da quasi vent'anni, ma c'è un aspetto di questi linguaggi che non ho mai veramente capito. Ovviamente ho usato i cast regolari, cioè
MyClass *m = (MyClass *)ptr;
dappertutto, ma sembra che ci siano altri due tipi di calchi, e non so la differenza. Qual è la differenza tra le seguenti linee di codice?
MyClass *m = (MyClass *)ptr;
MyClass *m = static_cast<MyClass *>(ptr);
MyClass *m = dynamic_cast<MyClass *>(ptr);
1654
3
Dovresti guardare l'articolo Programmazione C++/Type Casting.
Contiene una buona descrizione di tutti i diversi tipi di cast. Quanto segue è tratto dal link di cui sopra:
const_cast
I cast in stile C confondono const_cast, static_cast e reinterpret_cast.
Vorrei che il C++ non avesse i cast in stile C. I cast del C++ si distinguono correttamente (come dovrebbero; i cast sono normalmente indicativi di fare qualcosa di brutto) e distinguono correttamente tra i diversi tipi di conversione che i cast eseguono. Permettono anche di scrivere funzioni dall'aspetto simile, ad esempio boost::lexical_cast, il che è molto bello dal punto di vista della coerenza.
dynamic_cast
ha un controllo di tipo runtime e funziona solo con riferimenti e puntatori, mentrestatic_cast
non offre un controllo di tipo runtime. Per informazioni complete, vedi l'articolo MSDN static_cast Operator.