explicit type conversion (tsz. explicit type conversions)
int a = (int)3.14; // eredmény: 3
Cast típusa | Szintaxis | Használat |
---|---|---|
static_cast
|
static_cast<T>(expr)
|
Általános, típusbiztos konverzió |
const_cast
|
const_cast<T>(expr)
|
const vagy volatile eltávolítása
|
reinterpret_cast
|
reinterpret_cast<T>(expr)
|
Bitekvivalens, veszélyes konverzió |
dynamic_cast
|
dynamic_cast<T>(expr)
|
Futásidejű típusellenőrzés (RTTI )
|
static_cast
double d = 3.99;
int i = static_cast<int>(d); // eredmény: 3
Ez biztonságos, veszteséges konverzió.
const_cast
void f(int* p) {
// ...
}
const int x = 42;
f(const_cast<int*>(&x));
Figyelem! const_cast
használata akkor biztonságos, ha valóban nem const memória áll mögötte.
reinterpret_cast
int i = 65;
char* p = reinterpret_cast<char*>(&i);
std::cout << *p; // 'A' lehet
Nagyon veszélyes, ritkán ajánlott. Memóriabitenkénti nézetet vált.
dynamic_cast
(polimorf típusokhoz)class Base { public: virtual ~Base() = default; };
class Derived : public Base {};
Base* b = new Derived;
Derived* d = dynamic_cast<Derived*>(b);
Ha b
nem Derived*
, akkor d
→ nullptr
. Csak polimorf osztályokon működik (virtual
).
explicit
operátorclass MyClass {
int value;
public:
MyClass(int v): value(v) {}
explicit operator int() const {
return value;
}
};
MyClass obj(42);
// int x = obj; // ❌ nem engedélyezett
int y = static_cast<int>(obj); // ✅ működik
Az explicit
kulcsszó megakadályozza az implicit átalakítást, de engedi a kifejezett (explicit) castot.
Fogalom | Leírás |
---|---|
Explicit konverzió | A programozó által meghatározott típusváltás |
Modern szintaxis | static_cast , dynamic_cast , const_cast , reinterpret_cast
|
Használati esetek | Típusillesztés, const eltávolítás, polimorfia |
Ajánlott | static_cast , dynamic_cast
|
Kerülendő | reinterpret_cast , C-stílusú cast (kivéve speciális esetben)
|