编译器开关在c风格的强制转换中禁用const_cast语义

Compiler switch to disable const_cast semantics in c-style casts?

本文关键字:const 语义 cast 转换 开关 风格 编译器      更新时间:2023-10-16

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

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

显然,开发人员不知道他在做什么,但如果编译器没有默默地接受c风格强制转换,并且至少需要一个适当的const_cast,他可能会在提交之前考虑两次。

所以这让我思考,任何现代编译器有一个开关,以防止const_cast语义为c风格的强制转换?

防止所有C风格强制转换的发生是不实际的,允许它们的static_reinterpret_语义是必要的邪恶(如果只是对于一些库代码),但我的印象是,合法使用C风格强制转换来抛弃constness在 c++ 代码库中是非常罕见的,所以也许应该完全禁用它?

GCC有-Wcast-qual选项在c风格强制转换移除类型限定符时发出警告。结合-Werror,你可以完全防止它,如果你想。