问题描述
|
最近,我偶然发现了这样的代码:
void foo(const Bar* b) {
...
takes_nonconst_param_fn((Bar*)b);
...
显然,开发人员不知道他在做什么,但是如果编译器没有默默接受c-style-cast并且至少需要一个适当的const_cast
,那么在提交此内容之前他可能会两次。
因此,这让我开始思考,是否有任何现代编译器可以进行切换以防止C样式广播的“ 1”语义?
阻止所有c样式转换的发生根本不切实际,允许它们的static_
和reinterpret_
语义(如果仅用于某些库代码)是必不可少的,但我的印象是,合法使用c -style-casts消除constness在C ++代码库中很少见,因此也许应该完全禁用它?
解决方法
当C样式转换删除类型限定符时,GCC具有选项ѭ5来警告。结合
-Werror
,可以根据需要完全防止。