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