(1)はstatic_cast。
これは、基底クラスと型変換の間で使用される主要な変換タイプです。しかし、彼らは、具体的には、以下の例を見て、違いがあります。
基本的な型変換:
私たちはすべての基本的なデータ型変換、データ転送、データ型のハイ・ロータイプは、実際に暗黙の型変換であることを知っているが、安全である、なぜ?損失がないため、完全にOK整数INT Bについて、が、ときに高精度タイプのデータ損失に低い変換型データが現れ、このようなフロートA = 1.234として精度の損失が存在しないため、変換INT Bは= 、ようにしてもよいINT C = 1、フロートタイプDに変換したときに、小数点が失われ、それはこの時点で必要であり、私たちはしばしばディスプレイタイプ変換をキャストすると言う、C =(FLOAT)D、としてstatic_castを用いて、などの特定の静的データ、同様の効果があります。
クラスタイプ:
そして、少しは、ここでは異なる基本的な種類のビット、単純に、継承され、親の型のサブタイプのターンはstatic_castをによって変換することができますが、static_castをすることにより、親のタイプにはありません。しかし、それはdynamic_castをの別の実施形態によって、変換することができ、以下の具体的な(4)の概要を参照してください。
(2)はconst_cast。
これは、データ型の変換の内容に基づいて、実行するための比較的安全であり、その役割はそれほど通常ポインタに通常ポインタタイプは、参照は、しばしば共通の基準に変換すること、除去CONST一般的な属性のデータ・タイプであります。
例えば:
空FUNC(のconst int型* P)
{
int型* Q =はconst_cast <int型*>のp;
(* Q)++;
}
説明:通常の状況下では、Pの変化が発生することができないアドレスに格納されたCONST INT * P要求値は、多くの場合、ポインタを表すが、CONSTのはconst_castは、本明細書性質により除去し、対応するアドレス値をもたらす正常ポインタ値となり、これを変更することができます。しばしば引用された変換の正規参照もそう。
(3)はreinterpret_castは:
大きなリスクおよび不確実性を有し、コンテンツは無関係であっても、任意のポインタとの間に相互にポインタを変換することができる、任意のタイプの間で変換するために使用されます。これはプログラムで使用する必要がありますので避けるべきです。
(4)のdynamic_cast。
主に、クラス間の変換に使用されています。多くの場合、クラス階層との間の変換を変換するアップリンクとダウンリンクは、クロスクラス間で変換するためにも使用することができると述べました。アップリンククラス階層、static_castをdynamic_castを効果切り替える場合も同様であり、ダウンコンバージョンの間、のdynamic_castはstatic_castをより安全の種類を確認する機能を有しています。
EG1:
クラスA
{};
clsss B:公共A
{};
B Bと、
* = dynamic_castを<B *>(&B)。
EG2:
クラスA
{};
クラスB:公共A
{};
A * =新しいB;
A * B =新しいA;
B * C = dynamic_castを<B>。(TRUE)
B * D = dynamic_castt <B> B。(FALSE)