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

Mar*_* Ba 6 c++ casting const-cast compiler-options

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

void foo(const Bar* b) {
  ...
  takes_nonconst_param_fn((Bar*)b);
  ...
Run Code Online (Sandbox Code Playgroud)

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

所以这让我思考,任何现代编译器是否都有一个开关来阻止const_castc-style-casts的语义?

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

Mik*_*our 7

GCC可以选择-Wcast-qual在C样式转换删除类型限定符时发出警告.结合使用-Werror,如果需要,可以完全防止它.

  • 同时考虑为所有旧演员表演 - 风格 - 演员. (4认同)