Operace static_cast v C++ provádí explicitní , platné přetypování [1] .
Syntax:static_cast < type_to > ( object_from )
Kód se zkompiluje, pokud existuje způsob, jak převést z object_fromna type_to.
static_castnavržený k provádění všech druhů konverzí, které kompilátor umožňuje [2] . Všechny převody fungují pouze v případě kompatibility s a . constvolatile
1. Jakákoli typová konverze, kterou C++ provádí implicitně (například pole na ukazatel, jeden číselný typ na jiný, -ukazatel na typovaný, implicitní vyvolání konstruktoru). Může být vyžadováno explicitní psaní , například: void*static_cast
2. Pokud je odpovídající transformace označena klíčovým slovem . explicit
3. Převod z/do typu . enum class
enum class 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. Výslovně označit, kterou z přetížených funkcí převzít.
std :: transform ( s . begin (), s . end (), s . begin (), static_cast < int ( * )( int ) > ( std :: toupper ));5. Chcete-li převést ukazatele dolů v hierarchii typů bez kontroly typu. Na rozdíl od převodu ve stylu C a , převod na nesouvisející třídu není možný. reinterpret_cast
void TSomeForm::someButtonClick ( TObject * odesílatel ) { // Událost C++ Builder // Víme, že je to TButton, protože událost jsme nastavili sami // v editoru formulářů nebo konstruktoru TButton * bt = static_cast < TButton *> ( odesílatel ); bt -> Titulek = L "Clicked!" ; }Možné chyby závisí na tom, jaký druh převodu se provádí. Jsou možné přetečení, mimo rozsah a dokonce (pro převod ukazatelů) poškození paměti.
Například při převodu může proměnná získat neplatnou hodnotu a program na to nebude připraven. int → enum class