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

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,您可以根据需要完全阻止它。

10-08 09:26