-Wallを使用してC++コードでselectマクロを使用し、警告を表示しませんが、-Wold-style-castは使用しません。 Cスタイルのキャストを使わないことがなぜ重要なのかを再考することが、より良いアプローチだと思います。私は、Cの標準ライブラリ関数とインターフェースするために、それは完全に適切だと思います。
C++ dynamic_cast
の方法は多型およびクラスに有用である。 const_cast
は、定数を削除する特別なケースです。 static_cast
およびCの(type)
キャストは非常に似ています。 static_cast<type>
を使用してどのような利点が(type)
以上のキャストを提供するのかはわかりませんが、C++スタイルになっています。 reinterpret_cast<type>
はCの*(type*)&
キャスト方法に比べてほとんど利点がありません。
一般に、鋳造の必要性は、ソフトウェアの設計にある弱点を暗示しますが、これはおそらくdynamic_cast
です。自分自身のコードでキャストを必要としないように努力することは賞賛されますが、これらの値を遡ってサードパーティのライブラリ、特に標準やOSに適用しようとすると価値がないと思います。
コードでCスタイルのキャストを使用したくない場合は、コンパイラ設定以外のポリシーを設定し、コードを確認して削除します。あなたが本当にコンパイラにこの作業をさせたいなら、制御できないソフトウェアの警告を無効にする必要があります。これは価値があるよりも多くの作業であり、場合によっては必要でもありません。たとえば、ダーウィンでは、FD_ISSETの実装にキャストはありません。結局のところ、Cスタイルのキャストよりもはるかに悪い習慣がコードから取り除かれています。
この問題のコンパイラ固有の解決策があります。それらに興味があれば、使用しているコンパイラを教えてください。 –
これは、GCC 4.4.3 – mark