6

最近、私は次のようなコードに出くわしました。

void foo(const Bar* b) {
  ...
  takes_nonconst_param_fn((Bar*)b);
  ...

明らかに、開発者は自分が何をしているのかわかりませんでしたが、コンパイラがc-style-castを黙って受け入れず、少なくとも適切なものが必要なconst_cast場合は、これをコミットする前に2回も必要だった可能性があります。

それで、これは私に考えさせられました、現代のコンパイラーはconst_castc-style-castsのセマンティクスを防ぐためのスイッチを持っていますか?

static_c-style-castのすべての発生を防ぐことは単純に実用的ではなく、それらとセマンティクスを許可することは必要な悪reinterpret_です(一部のライブラリコードの場合のみ)が、私の印象では、c-style-castの合法的な使用は捨て去られますconstnessはC++コードベースでは非常にまれなので、完全に無効にすることは可能でしょうか?

4

1 に答える 1

7

GCCには-Wcast-qual、Cスタイルのキャストが型修飾子を削除したときに警告するオプションがあります。と組み合わせると-Werror、必要に応じて完全に防ぐことができます。

于 2011-04-13T14:49:41.433 に答える