it-swarm.com.de

Casting von int nach char im C ++ - Stil

In traditionellem C können Sie Folgendes tun:

int i = 48;
char c = (char)i;
//Now c holds the value of 48. 
//(Of course if i > 255 then c will not hold the same value as i).  

Welche der c ++ - Casting-Methoden (static_cast, reinterpret_cast) eignet sich, um diese Aufgabe zu erledigen?

20
Subway

Sie können implizit zwischen numerischen Typen konvertieren, auch wenn diese an Genauigkeit verlieren:

char c = i;

Möglicherweise möchten Sie jedoch Compiler-Warnungen aktivieren, um potenziell verlustbehaftete Konvertierungen wie diese zu vermeiden. Wenn Sie dies tun, verwenden Sie static_cast für die Konvertierung.

Von den anderen Besetzungen:

  • dynamic_cast funktioniert nur für Zeiger oder Verweise auf polymorphe Klassentypen;
  • const_cast kann keine Typen ändern, nur const oder volatile Qualifikationsmerkmale;
  • reinterpret_cast konvertiert unter bestimmten Umständen zwischen Zeigern oder Referenzen und völlig unabhängigen Typen. Insbesondere werden keine numerischen Konvertierungen durchgeführt.
  • C- und Funktionsstile machen jede Kombination von static_cast, const_cast und reinterpret_cast wird benötigt, um die Arbeit zu erledigen.
13
Mike Seymour

Sie sollten static_cast<char>(i) verwenden, um die Ganzzahl i in char umzuwandeln.

reinterpret_cast sollte so gut wie nie verwendet werden, es sei denn, Sie möchten einen Typ in einen grundlegend anderen Typ umwandeln.

Ebenfalls reinterpret_cast ist maschinenabhängig und erfordert daher ein umfassendes Verständnis der Typen sowie der Implementierung der Umwandlung durch den Compiler.

Weitere Informationen zum C++ - Casting finden Sie unter:

22
Snps

reinterpret_cast kann für diese Konvertierung nicht verwendet werden, der Code wird nicht kompiliert. Gemäß C++ 03 Standard Abschnitt 5.2.10-1:

Conversions that can be performed explicitly using reinterpret_cast are listed below. No other conversion can be performed explicitly using reinterpret_cast.

Diese Konvertierung ist in diesem Abschnitt nicht aufgeführt. Auch das ist ungültig:

long l = reinterpret_cast<long>(i)

static_cast muss hier verwendet werden. Siehe this und this SO Fragen.

0
Sanish