6

最近我偶然发现了这样的代码:

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

显然,开发人员不知道他在做什么,但如果编译器没有默默地接受 c-style-cast 并且至少需要一个正确的const_cast,他可能会在提交之前两次。

所以这让我想到,是否有任何现代编译器有一个开关来防止const_castc 样式转换的语义?

阻止所有 c-style-casts 的发生根本不切实际,允许它们static_reinterpret_语义(如果仅适用于某些库代码)是必要的邪恶,但我的印象是,c-style-casts 的合法使用被抛弃constness 在C++代码库中非常罕见,所以也许应该可以完全禁用它?

4

1 回答 1

7

GCC 可以选择-Wcast-qual在 C 样式强制转换删除类型限定符时发出警告。结合-Werror,您可以根据需要完全防止它。

于 2011-04-13T14:49:41.433 回答