c++ - 明示的な型変換の要件

c++ type-conversion

static_castについては、組み込みの型変換関数が存在しない限り、static_castを使用して変換を実行できないのは本当ですか?ただし、戻り値の型が有効であることを考慮して、型に対してreinterpret_castを実行できます。

int main()
{
    WORD word;
    HWND hwnd = static_cast<HWND>(word); // error
    HWND hwnd = reinterpret_cast<HWND>(word); // ok, considering a valid handle is returned.
}


static_castで行われる明示的な型変換には、reinterpret_castとは異なり、変換関数が必要ですか?
答え
reinterpret_castは、完全に無関係な型を変換できるようにするだけです。メモリのチャンクを別のタイプとして扱うだけです。したがって、コンパイルエラーや実行時エラーは発生せず、(通常は)クラッシュを引き起こすだけなので、使用するのは非常に危険です。

static_castは、キャストの有効性のコンパイル時チェックを提供します。型を別の型として処理できない場合、static_castを使用すると、キャストしようとするとコンパイル時エラーが発生します。
型間の暗黙的な変換(intからfloat、またはvoid *へのポインターなど)を行い、明示的な変換関数(または暗黙的な変換関数)を呼び出すこともできます。

したがって、暗黙の変換組み込み関数が存在する暗黙のキャストを実行できると言えます。それが混乱である場合、それは通常、cスタイルのキャストの置き換えと見なされます。
関連記事

c++ - ペアベクトルc++の上限

c++ - setjmpがスタックを保存しないのはなぜですか?

c++ - coutをキャプチャして関数にリダイレクトする

c++ - Eclipseを使用してMySQLをC++に接続しますか?

c++ - C++用のどのXSLTプロセッサーですか?

c++ - オブジェクト指向プログラミング-メンバーとしての変数、またはグローバルとしてのヘッダーのみ?

c++ - TinyXmlパーサーはファイルを正しくロードすることを拒否します

c++ - shared_ptrでラムダをブーストする

c++ - C++ / CLIを使用したネイティブC++テンプレートクラスのラップ

c++ - C++でページのコンテンツを取得する