従来の C では、次のことができます。
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).
このジョブを実行するのに適した C++ キャスト メソッド (static_cast、reinterpret_cast) はどれですか?
を使用static_cast<char>(i)
して整数i
をにキャストする必要がありますchar
。
reinterpret_cast
ある型を根本的に異なる型にキャストする場合を除き、ほとんど使用しないでください。
またreinterpret_cast
、マシンに依存するため、安全に使用するには、型とコンパイラがキャストを実装する方法を完全に理解する必要があります。
C++ キャストの詳細については、次を参照してください。
精度が失われた場合でも、数値型間で暗黙的に変換できます。
char c = i;
ただし、コンパイラの警告を有効にして、このような損失が発生する可能性のある変換を回避したい場合があります。その場合はstatic_cast
、変換に使用します。
他のキャストのうち:
dynamic_cast
ポリモーフィックなクラス型へのポインターまたは参照に対してのみ機能します。const_cast
タイプのみconst
、またはvolatile
修飾子を変更することはできません。reinterpret_cast
ポインターまたは参照と、まったく関係のない型との間の変換を行う特別な状況向けです。具体的には、数値変換は行いません。static_cast
、const_cast
ジョブreinterpret_cast
を完了するために必要です。reinterpret_cast
この変換に使用できない場合、コードはコンパイルされません。C++03 標準セクション 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.
この変換は、そのセクションには記載されていません。これでも無効です:
long l = reinterpret_cast<long>(i)