4つの強制タイプ変換

2216 ワード

4つの強制タイプ変換は、実際の開発で使用されるシーンが比較的多いので、以下にまとめます.
(一)用法:static_cast(変数または式)
これは主に以下のいくつかの用法がある:(1)クラス階層におけるベースクラスと派生クラス間のポインタまたは参照の変換に用いられる上り変換(派生クラスのポインタまたは参照をベースクラス表現に変換する)は安全に下り変換(ベースクラスのポインタまたは参照を派生クラス表現に変換する)を行うものであり、動的タイプチェックがないため、したがって、intをcharに変換するなど、基本データ型間の変換には安全ではない(2).この変換の安全も開発者に保証される(3)空ポインタをターゲットタイプの空ポインタに変換する(4)任意のタイプの式をvoidタイプに変換する注意:static_キャストはexpressionのconst、volitale、または_を変換できません.unalignedプロパティ.
static_cast:C++に組み込まれた基本データ型間の相互変換を実現できます.
クラスに触れるとstatic_castは相互に関連するタイプでのみ相互変換でき,必ずしも虚関数を含まない.
(2)用法:const_cast (expression)
C言語では、const限定子は通常、変数を限定するために使用され、その変数の値が変更できないことを示すために使用される.
そしてconst_castは,このような修正できない定数特性を強制的に除去するために用いられるが,const_には特に注意が必要である.castは変数を除去するための定数ではなく、定数オブジェクトを指すポインタまたは参照の定数を除去し、定数を除去するオブジェクトはポインタまたは参照でなければならない.
この演算子は、タイプのconstまたはvolatileプロパティを変更するために使用します.constまたはvolatile修飾に加えてtype_idとexpressionのタイプは同じです.定数ポインタは非常量ポインタに変換され、元のオブジェクトを指します.定数参照は非常量参照に変換され、元のオブジェクトを指します.定数オブジェクトが非常量オブジェクトに変換されます.
(3)用法:reinterpret_cast (expression)
C++言語でreinterpret_castには主に3つの強制変換用途があります.ポインタまたは参照のタイプを変更したり、ポインタまたは参照を十分な長さの整形に変換したり、整数をポインタまたは参照のタイプに変換したりします.
type-idは、ポインタ、参照、算術タイプ、関数ポインタ、またはメンバーポインタでなければなりません.1つのポインタを1つの整数に変換したり、1つの整数を1つのポインタに変換したりすることができます(まず1つのポインタを1つの整数に変換し、その整数を元のタイプのポインタに変換したり、元のポインタ値を得ることができます).reinterpret_を使用cast強制変換プロセスはビットビットのコピーにすぎないので、使用中は特に慎重にする必要があります.
(4)用法:dynamic_cast (expression)
(1)他の3種類はすべてコンパイル時に完成したもので、dynamic_castは実行時に処理され、実行時にタイプチェックが行われます.
(2)組み込みの基本データ型の強制変換には使用できません.
(3)dynamic_cast変換が成功するとクラスへのポインタや参照が返され、変換に失敗するとNULLが返されます.
(4)dynamic_の使用castが変換する場合、ベースクラスには必ず虚関数があります.そうしないと、コンパイルは通過しません.
    B            :       ,                         ,        。

   
                        ,              (         ,    ) ,
                    。

(5)クラスの変換時にクラス階層間で上り変換を行う場合dynamic_キャストとstatic_キャストの効果は同じです.下り変換時にdynamic_castにはstatic_よりもタイプチェック機能があります.castの方が安全です.
        ,            (       );    ,            。

                       ,                                ,      。

     C++ ,                    ,                  ,       。Dynamic_cast                          。