Operatory rzutowania w C++

Czasami podczas pisania programów komputerowych musimy przypisać jakąś daną załóżmy typu double do innej zmiennej, która niestety jest już innego typu. W takim przypadku z pomocą przychodzą nam tak zwane operatory rzutowania, które w C++ przeszły w ostatnim czasie niemalże rewolucję. Nie będę na łamach tego artykułu opisywał starych (co ciekawe dalej działających) technik konwersji różnego rodzaju danych ale skupię się tutaj na nowych, zgodnych z obecnym standardem operatorach rzutowania.

C++ oferuje nam 4 operatory rzutowania, takie jak:

  1. static_cast<nazwaTypuNaKtoryChcemyZrzutowacJakasDana>(wyrazenie);
  2. const_cast<nazwaTypuNaKtoryChcemyZrzutowacJakasDana>(wyrazenie);
  3. dynamic_cast<nazwaTypuNaKtoryChcemyZrzutowacJakasDana>(wyrazenie);
  4. reinterpret_cast<nazwaTypuNaKtoryChcemyZrzutowacJakasDana>(wyrazenie);

static_cast

static_cast wykorzystujemy do konwersji danych zapisanych w zmiennych różnych typów:

const_cast

const_cast wykorzystujemy do konwersji stałych na zmienne, zmiennych na stałe lub stałych jakiegoś typu na stałe innego typu (uwaga: nie można jednocześnie rzutować jakiejś stałej na zmienną innego typu i odwrotnie):

UWAGA: Używając const_cast należy operować na wskaźnikach.

dynamic_cast

dynamic_cast wykorzystujemy między innymi dla typów polimorficznych. Na łamach tego artykułu nie będę się rozpisywał jak to działa bowiem jest to strasznie rozległy temat nadający się na odrębny wpis. Ograniczę się więc tylko do zaprezentowania przykładowego kodu:

reinterpret_cast

reinterpret_cast używamy do rzutowania wskaźników (a właściwie adresów które przechowują) na inny typ. Jeżeli mam na przykład wskaźnik, który wskazuje na komórki pamięci typu double, a chcemy zapisać jego zawartość (czyli adres na który wskazuje) do wskaźnika przeznaczonego na typ int to musimy właśnie użyć tego operatora rzutowania:

, , , , , , ,