質問: `c++`で複数あるキャストの違いを教えてください。 どちらも使える場合はどちらを選べばいいかわかまりません。 ``` static_cast(x); // 静的キャスト(静的な普通の型変換を行うキャスト) (const char*)x; // キャスト的記法 () const char*(x); // 関数的記法 ```
回答: 原則としては `static_cast` を使ってください。 キャストにはいくつかの種類があって、何の問題もない安全なものも、正しく使えば安全なものも、何も保証されないものもあります。 しかし `(const char*)` という記法は区別なくキャストしてしまうのです。 (関数風の書き方でも効果は同じです。) `static_cast` は `static_cast` の要件を満たす変換のみしか許されません。 そして `static_cast` が許す変換は比較的安全なものに限られています。 もしうっかり危険な変換をしようとしてしまったらエラーになってくれるので安心です。 逆に、危険なキャストは危険なキャストとしてそれぞれの性質に応じて `dynamic_cast`, `const_cast`, `reinterpret_cast` を使い分けるべきです。 古いスタイルのキャストは C との互換性のために残されていますが、どのような意図をもってキャストしているのか読み取り難く、バグの原因になりやすいので原則として避けるのが望ましいと考えられています。