reinterpret_cast
vs の適用性に少し混乱していstatic_cast
ます。私が読んだことから、一般的なルールは、コンパイル時に型を解釈できるときに静的キャストを使用することstatic
です。これは、C ++コンパイラが暗黙的なキャストのために内部的に使用するキャストでもあります。
reinterpret_cast
sは次の2つのシナリオに適用されます。
- 整数型からポインタ型へ、またはその逆への変換
- あるポインタ型を別のポインタ型に変換します。私が得る一般的な考えは、これは移植性がなく、避けるべきであるということです。
私が少し混乱しているのは必要な使用法の1つです。CからC ++を呼び出しています。CコードはC ++オブジェクトを保持する必要があるため、基本的にはを保持していvoid*
ます。とvoid *
クラス型の間の変換にはどのキャストを使用する必要がありますか?
私は両方の使い方を見ているstatic_cast
とreinterpret_cast
?私が読んでいるものからstatic
、キャストがコンパイル時に発生する可能性があるので、それはより良いように見えますか?reinterpret_cast
あるポインタ型から別のポインタ型に変換するために使用すると書かれていますが?
reinterpret_cast
実行時には発生しません。どちらもコンパイル時のステートメントです。en.cppreference.com/w/cpp/language/reinterpret_castから:「static_castとは異なり、const_castと同様に、reinterpret_cast式はCPU命令にコンパイルされません。これは、コンパイラにビットのシーケンスを処理するよう指示する純粋なコンパイラディレクティブですタイプがnew_typeであるかのように式の(オブジェクト表現)。