Ugrás a tartalomhoz

static_cast

A Wikiszótárból, a nyitott szótárból


Főnév

static cast (tsz. static casts)

  1. (informatika) A static_cast C++-ban egy típuskasztoló operátor, amelyet statikus típuskonverzióhoz használunk. Ez egy biztonságosabb és kifejezőbb módja a típusátalakításnak, mint a C-stílusú kasztolás ((T) x).

Mire jó a static_cast?

  • Egymással kompatibilis típusok közötti konverzióra (pl. intdouble).
  • Alap- és származtatott osztályok közötti kasztolásra, ha a konverzió biztonságos.
  • void* mutatók visszaalakítására konkrét típusú mutatóvá.
  • enum és számértékek közötti konverzióra.

Példák static_cast használatára

1. Alapvető típusok közötti átalakítás

#include <iostream>

int main() {
    double d = 3.14;
    int i = static_cast<int>(d);  // Lebegőpontos → egész szám átalakítás
    std::cout << "i: " << i << std::endl; // 3
    return 0;
}

2. Alap- és származtatott osztályok közötti átalakítás

#include <iostream>

class Base {};
class Derived : public Base {};

int main() {
    Derived d;
    Base* basePtr = static_cast<Base*>(&d); // Származtatott osztály mutatójának átalakítása alaposztály mutatójává
    return 0;
}

Ez biztonságos, mivel minden Derived objektum egy Base típusú objektum is.

3. void* visszaalakítása

#include <iostream>

int main() {
    int x = 42;
    void* ptr = &x;  // void* típusú mutató
    int* intPtr = static_cast<int*>(ptr);  // Visszaalakítás int mutatóvá
    std::cout << *intPtr << std::endl; // 42
    return 0;
}

4. Enum és számértékek közötti átalakítás

#include <iostream>

enum Color { RED, GREEN, BLUE };

int main() {
    Color c = RED;
    int colorValue = static_cast<int>(c); // Enum érték konvertálása int-é
    std::cout << "Color value: " << colorValue << std::endl; // 0
    return 0;
}

Mire nem jó a static_cast?

  • Nem ellenőrzi a futásidejű típushelyességet (pl. dynamic_cast erre való).
  • Nem konvertál különböző osztályhierarchiák között biztonságosan.
  • Nem használható const_cast-ként a const vagy volatile módosítók eltávolítására.

Összegzés:
A static_cast egy hatékony és biztonságosabb módja a típusátalakításnak, amikor a konverzió egyértelmű és nem igényel futásidejű ellenőrzést.