编译器切换到c样式转换中禁用const_cast语义?

时间:2011-04-13 14:21:52

标签: c++ casting compiler-options const-cast

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

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

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

所以这让我思考,任何现代编译器都有一个转换来阻止c-style-casts的const_cast语义?

防止所有出现的c-style-casts是不切实际的,允许他们的static_reinterpret_语义(如果仅用于某些库代码)是必要的恶魔,但我的印象是,在 C ++ 代码库中合法使用c-style-casts来抛弃const是非常罕见的,所以也许应该可以完全禁用它?

1 个答案:

答案 0 :(得分:7)

GCC有一个选项-Wcast-qual可以在C风格的转换删除类型限定符时发出警告。结合-Werror,您可以根据需要完全阻止它。