Frage Static_cast Integeradresse zum Zeiger


Warum brauchst du einen C-Style Cast für die folgenden?

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

5
2017-09-18 00:38


Ursprung


Antworten:


static_cast kann nur zwischen zwei spielen verbunden Arten. Eine Ganzzahl ist nicht mit einem Zeiger verknüpft und umgekehrt, also müssen Sie sie verwenden reinterpret_cast stattdessen, was dem Compiler sagt neu interpretieren die Bits der Ganzzahl, als wären sie ein Zeiger (und umgekehrt):

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

Lesen Sie das Folgende für weitere Details:

Typenkonvertierungen


11
2017-09-18 00:46



Du brauchst einen C-Style Cast oder direkt den reinterpret_cast Es steht für das Umwandeln einer Ganzzahl in einen Zeiger, da der Standard dies für nicht verwandte Typen angibt.

Der Standard schreibt diese Abbilder dort vor, weil

  1. Du machst da etwas Gefährliches.
  2. Du tust etwas sehr selten Nützliches.
  3. Sie tun etwas, das stark von der Implementierung abhängig ist.
  4. Meistens ist das einfach ein Programmierfehler.

Wann sollten static_cast, dynamic_cast, const_cast und reinterpret_cast verwendet werden?
Regulärer Cast vs. Static_cast vs. Dynamic_cast


2
2017-09-18 00:46