最近我偶然发现了这样的代码:
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是非常罕见的,所以也许应该可以完全禁用它?
答案 0 :(得分:7)
GCC有一个选项-Wcast-qual
可以在C风格的转换删除类型限定符时发出警告。结合-Werror
,您可以根据需要完全阻止它。