Vairāk
Parastais cast vs. static_cast vs. dynamic_cast
Esmu rakstījis C un C++ kodu jau gandrīz divdesmit gadus, bet ir viens šo valodu aspekts, ko es nekad neesmu īsti sapratis. Es, protams, esmu izmantojis parasto casts, t.i.
MyClass *m = (MyClass *)ptr;
visur, bet šķiet, ka ir vēl divi citi casts veidi, un es nezinu, kāda ir atšķirība. Kāda ir atšķirība starp šādām koda rindiņām?
MyClass *m = (MyClass *)ptr;
MyClass *m = static_cast<MyClass *>(ptr);
MyClass *m = dynamic_cast<MyClass *>(ptr);
1654
3
Jums vajadzētu apskatīt rakstu C++ Programming/Type Casting.
Tajā ir labi aprakstīti visi dažādie cast tipi. No iepriekš minētās saites ņemts šāds teksts:
C stila casts apvieno const_cast, static_cast un reinterpret_cast.
Es vēlos, lai C++ nebūtu C stila castu. C++ casts izceļas pareizi (kā tam arī vajadzētu būt; casts parasti norāda uz kaut ko sliktu) un pareizi nošķir dažādus pārveidošanas veidus, ko veic casts. Tās arī ļauj rakstīt līdzīgi izskatošas funkcijas, piemēram, boost::lexical_cast, kas ir diezgan jauki no konsekvences viedokļa.
dynamic_cast
ir darbības laika tipa pārbaude un darbojas tikai ar atsaucēm un rādītājiem, savukārtstatic_cast
nepiedāvā darbības laika tipa pārbaudi. Pilnīgu informāciju skatiet MSDN rakstā static_cast Operator.