Casting

Static cast = normale type omgjøringer
syntax: static_cast< [new type] >( [expression] )
Const cast = fjerne eller legge til const på en variabel
Dynamic cast = brukt kun for polymorphism, gjøre om pointere/referanser i classer
Reinterpret cast = gjør om fra en type til en annen, bitvise

static_cast

Syntax: a = static_cast<T>(p)

Prøv å konvertere p til T hvis T kan bli konvertert til p's type.

// Gjør 3.14 (float) om til 3 (int)
int i1 = static_cast<int>(3.14);

const_cast

const_cast brukes til å legge til eller fjerne const fra en variabel.

Syntax: a = const_cast<T>(p)

int i = 3;                 // i is not declared const
const int& rci = i; 
const_cast<int&>(rci) = 4; // OK: modifies i

// Gjør om fra 'const wchar' til 'wchar'
const wchar_t *p = L"Hei";
wchar_t *p2 = const_cast<wchar_t*>(p);

dynamic_cast

Syntax: a = dynamic_cast<T*>(p)
Syntax: a = dynamic_cast<T&>(*p)

dynamic_cast brukes kun til polymorphism. Gjøre om pointere og referanser i klasser.

reinterpret_cast

Syntax: a = reinterpret_cast<T>(p)

reinterpret_cast brukes til å utføre en bitvis konvertering fra p til T. Anbefales ikke å bruke denne da det kan gi uventede resultater.

// Hent verdi lagret i en minneadresse
// <iostream>, <cstdint>

// Minneaddresse
uintptr_t p = 0x00059ffa9c;
// Gjør om uint til int* og hent verdien via dereferanse
int value = *reinterpret_cast<int*>(p);
cout << value;