(T)x の代わりに static_cast
クラシック C スタイルのキャスト(T)x として知られる、複数の個別のキャスト操作を 1 つの構文でグループ化します。コンパイラは static_cast、reinterpret_cast、const_cast、dynamic_cast を区別しないため、混乱や潜在的なエラーが発生する可能性があります。
static_cast の利点
static_cast
危険C スタイル キャストの
ただし、C スタイル キャストは本質的に危険:
安全なキャストと安全でないキャストの例
次のコードを考えてみましょう:
class CDerivedClass : public CMyBase { }; class CMyOtherStuff { }; CMyBase *pSomething; // filled somewhere CDerivedClass *pMyObject; pMyObject = static_cast<CDerivedClass*>(pSomething); // Safe; as long as we checked CMyOtherStuff *pOther; pOther = static_cast<CMyOtherStuff*>(pSomething); // Compiler error: Can't convert pOther = (CMyOtherStuff*)pSomething; // No compiler error. // Same as reinterpret_cast<> // and it's wrong!!!
最初の行の static_cast は明確です。意図した変換を伝え、安全性チェックを提供します。ただし、2 行目の C スタイルのキャストは安全ではなく、適切な予防措置を講じずに無関係な型を変換しようとするため、実行時エラーが発生する可能性があります。
以上がより安全な C キャストのために `(T)x` の代わりに `static_cast(x)` を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。