web-dev-qa-db-ja.com

C ++スタイルのキャストを使用してintをcharにキャストする

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

20
Subway

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

char c = i;

ただし、コンパイラの警告を有効にして、このような潜在的に損失の多い変換を回避することができます。その場合は、static_castを変換に使用します。

他のキャストの:

  • dynamic_castは、多型クラス型へのポインターまたは参照に対してのみ機能します。
  • const_castはタイプを変更できません。constまたはvolatile修飾子のみを変更できます。
  • reinterpret_castは、ポインターまたは参照と完全に無関係な型との間の変換を行う特別な状況のためのものです。具体的には、数値変換を行いません。
  • Cスタイルおよび関数スタイルのキャストは、仕事を完了するために必要なstatic_castconst_cast、およびreinterpret_castの任意の組み合わせを実行します。
13
Mike Seymour

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

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

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

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

22
Snps

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の質問。

0
Sanish