6

C++ Without Fear: A Beginner's Guide That Makes You Feel Smart本の(8) 章では、次のことが言及されています。reinterpret_cast

....あるポインター型 (int ) から別の型 (char*) に変換します。キャストは、指し示すデータが解釈される方法を変更するため、static_cast とは対照的に、reinterpret_cast と呼ばれます。

ここでこの段落について説明できますか? 特に作戦名の理由は?

ありがとう。

4

2 に答える 2

9

基本的にreinterpret_cast、特定の場所のビット パターンを別の型として再解釈します。

たとえば、次を参照してください

reinterpret_cast 演算子は、引数と同じビット パターンを持つ新しい型の値を生成します。

Aは、引数を単に再解釈するのではなく、static cast 変換します。intto を static_casting し、 tofloatをreinterpret_casting するintことで、これを試すことができますfloat。結果はまったく異なります。

于 2011-01-20T14:27:16.083 に答える
4

ここには空想的なものは何もありません。それは本当に何かを再解釈することを意図したものです。

標準 5.3.10 から、reinterpret_cast は次のケースに対応することを目的としています。

  • ポインターは、それを保持するのに十分な大きさの任意の整数型に明示的に変換できます。
  • 整数型または列挙型の値は、明示的にポインターに変換できます。
  • 関数へのポインターは、異なる型の関数へのポインターに明示的に変換できます。
  • オブジェクトへのポインターは、別のオブジェクト型へのポインターに明示的に変換できます。
  • 関数へのポインターからオブジェクト型へのポインターへの変換、またはその逆の変換は、条件付きでサポートされています。
  • null ポインター値 (4.10) は、変換先の型の null ポインター値に変換されます。
  • T1 と T2 が両方とも関数型または両方のオブジェクト型である場合、型「T1 型の X のメンバーへのポインター」の prvalue は、別の型「T2 型の Y のメンバーへのポインター」の prvalue に明示的に変換できます。
  • 型「T1 へのポインター」の式を reinterpret_cast を使用して「T2 へのポインター」型に明示的に変換できる場合、型 T1 の左辺値式を「T2 への参照」型にキャストできます。つまり、参照キャスト reinterpret_cast < T& >(x) は、組み込みの & および * 演算子を使用した変換 *reinterpret_cast< T* >(&x) と同じ効果があります (reinterpret_cast< T&& >(x) についても同様です)。 .
于 2011-01-20T14:33:22.023 に答える