従来の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)はどれですか?
精度が失われた場合でも、数値型を暗黙的に変換できます。
char c = i;
ただし、コンパイラの警告を有効にして、このような潜在的に損失の多い変換を回避することができます。その場合は、static_cast
を変換に使用します。
他のキャストの:
dynamic_cast
は、多型クラス型へのポインターまたは参照に対してのみ機能します。const_cast
はタイプを変更できません。const
またはvolatile
修飾子のみを変更できます。reinterpret_cast
は、ポインターまたは参照と完全に無関係な型との間の変換を行う特別な状況のためのものです。具体的には、数値変換を行いません。static_cast
、const_cast
、およびreinterpret_cast
の任意の組み合わせを実行します。static_cast<char>(i)
を使用して、整数i
をchar
にキャストする必要があります。
reinterpret_cast
は、1つの型を根本的に異なる型にキャストする場合を除き、ほとんど使用しないでください。
また、reinterpret_cast
はマシンに依存するため、安全に使用するには、型とコンパイラがキャストを実装する方法を完全に理解する必要があります。
C++キャストの詳細については、以下を参照してください。
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)