2014-09-18 15 views
5

Dlaczego potrzebujesz obsady w stylu C dla następujących elementów?Static_cast adres liczby całkowitej do wskaźnika

int* ptr = static_cast<int*>(0xff); // error: invalid static_cast from type 'int' 
            // to type 'int*' 
int* ptr = (int*) 0xff; // ok. 
+7

można również użyć 'reinterpret_cast' których obsada C-styl będzie ostatecznie użyć w każdym razie. Wciąż nie jest to dobry pomysł. –

Odpowiedz

11

static_cast może tylko rzucić między dwoma związanych typów. Liczbą całkowitą nie dotyczy wskaźnika i vice versa, więc trzeba użyć reinterpret_cast zamiast, który informuje kompilator do reinterpretacji bity liczby całkowitej, jak gdyby były to wskaźnik (i vice versa):

int* ptr = reinterpret_cast<int*>(0xff); 

Czytaj następujące po więcej szczegółów:

Type conversions

2

Trzeba oddanych C-styl lub bezpośrednio reinterpret_cast to oznacza liczbę całkowitą podczas rzucania do wskaźnika, ponieważ standard mówi tak dla niespokrewnionych typów.

Standardowe mandaty tam te odlewy, ponieważ

  1. robisz coś niebezpiecznie.
  2. robisz coś bardzo rzadko przydatnego.
  3. robisz coś wysoce zależnego od implementacji.
  4. najczęściej, to po prostu błąd programowania.

When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?
Regular cast vs. static_cast vs. dynamic_cast

Powiązane problemy