39

従来の 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) はどれですか?

4

4 に答える 4

32

を使用static_cast<char>(i)して整数iをにキャストする必要がありますchar

reinterpret_castある型を根本的に異なる型にキャストする場合を除き、ほとんど使用しないでください。

またreinterpret_cast、マシンに依存するため、安全に使用するには、型とコンパイラがキャストを実装する方法を完全に理解する必要があります。

C++ キャストの詳細については、次を参照してください。

于 2013-06-03T14:26:31.743 に答える
31

精度が失われた場合でも、数値型間で暗黙的に変換できます。

char c = i;

ただし、コンパイラの警告を有効にして、このような損失が発生する可能性のある変換を回避したい場合があります。その場合はstatic_cast、変換に使用します。

他のキャストのうち:

  • dynamic_castポリモーフィックなクラス型へのポインターまたは参照に対してのみ機能します。
  • const_castタイプのみconst、またはvolatile修飾子を変更することはできません。
  • reinterpret_castポインターまたは参照と、まったく関係のない型との間の変換を行う特別な状況向けです。具体的には、数値変換は行いません。
  • C スタイルおよび関数スタイルのキャストは、 , の任意の組み合わせを実行しstatic_castconst_castジョブreinterpret_castを完了するために必要です。
于 2013-06-03T14:53:31.463 に答える
0

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)

static_castここで使用する必要があるものです。thisおよびthis SO の質問を参照してください。

于 2013-06-03T17:03:22.037 に答える