编译器开关禁用c样式转换中的const_cast语义?

问题描述

| 最近,我偶然发现了这样的代码:
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
,可以根据需要完全防止。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...