A quanto pare ho sbagliato nel mio taglio iniziale a una risposta. Sono approssimativamente equivalenti. E mentre nomi di tipi composti come long long
o void *
non possono utilizzare direttamente la sintassi funzionale (ad esempio, long long(val)
non funziona), utilizzare typedef
può aggirare questo problema.
Entrambe le annotazioni sul cast sono pessime e dovrebbero essere evitate. Ad esempio:
const char c = 'a';
void *fred = (void *)(&c);
funziona, e non dovrebbe.
Sia il cast notazione di tipo C a volte si comportano come static_cast
, a volte come const_cast
, a volte come reinterpret_cast
, o anche una combinazione dei due a seconda della situazione esatto in cui viene utilizzato. Queste semantiche sono piuttosto complesse e non è sempre facile dire esattamente cosa sta succedendo in una determinata situazione.
Ho utilizzato principalmente i cast di stile C++ static_cast<type>(val)
e non uso mai cast in stile C. Basandomi sulla mia ricerca per questa domanda, smetterò anche di usare i cast in stile funzione per qualsiasi cosa. La domanda "C++ cast syntax styles" ha una risposta eccellente (quella accettata) che spiega il perché.
Vedere anche: http://stackoverflow.com/questions/32168/c-cast-syntax-styles –