En operation static_cast i C++ udfører en eksplicit , gyldig cast [1] .
Syntaks:static_cast < type_to > ( object_from )
Koden vil kompilere, hvis der er en måde at konvertere fra object_fromtil type_to.
static_castdesignet til at udføre alle former for konverteringer tilladt af compileren [2] . Alle konverteringer virker kun, hvis der er kompatibilitet med og . constvolatile
1. Enhver af de typekonverteringer, som C++ udfører implicit (f.eks. array til pointer, en numerisk type til en anden, -pointer til indtastet, implicit konstruktørinvocation). Eksplicit skriftlig skrivning kan være påkrævet, for eksempel: void*static_cast
2. Hvis den tilsvarende transformation er markeret med nøgleordet . explicit
3. Konvertering fra/til type . enum class
enum klasse TriBool { FAL , TRU , UNDEF , NN }; enum { TriBool_N = static_cast < int > ( TriBool :: NN ) }; const char * triBoolNames [ TriBool_N ] = { "false" , "true" , "undef" }; auto x = TriBool :: TRU ; std :: cout << triBoolNames [ static_cast < int > ( x )] << std :: endl ;4. For eksplicit at angive, hvilken af de overbelastede funktioner, der skal tages.
std :: transform ( s . start (), s . end (), s . start (), static_cast < int ( * )( int ) > ( std :: toupper ));5. For at konvertere pointere ned i typehierarkiet uden at kontrollere. I modsætning til C-stil konvertering og , er konvertering til en ikke-relateret klasse ikke mulig. reinterpret_cast
void TSomeForm::someButtonClick ( TObject * sender ) { // C++ Builder begivenhed // Vi ved, at det er en TButton, fordi vi selv indstiller begivenheden // i formulareditoren eller TButton- konstruktøren * bt = static_cast < TButton *> ( sender ); bt -> Billedtekst = L "Klikket!" ; }Mulige fejl afhænger af, hvilken form for konvertering der udføres. Overløb, uden for rækkevidde og endda (for pointerkonverteringer) hukommelseskorruption er mulige.
For eksempel kan en variabel under konvertering få en ugyldig værdi, og programmet vil ikke være klar til dette. int → enum class