编译器开关在c风格的强制转换中禁用const_cast语义
Compiler switch to disable const_cast semantics in c-style casts?
最近我偶然发现了这样的代码:
void foo(const Bar* b) {
...
takes_nonconst_param_fn((Bar*)b);
...
显然,开发人员不知道他在做什么,但如果编译器没有默默地接受c风格强制转换,并且至少需要一个适当的const_cast
,他可能会在提交之前考虑两次。
所以这让我思考,任何现代编译器有一个开关,以防止const_cast
语义为c风格的强制转换?
防止所有C风格强制转换的发生是不实际的,允许它们的static_
和reinterpret_
语义是必要的邪恶(如果只是对于一些库代码),但我的印象是,合法使用C风格强制转换来抛弃constness在 c++ 代码库中是非常罕见的,所以也许应该完全禁用它?
GCC有-Wcast-qual
选项在c风格强制转换移除类型限定符时发出警告。结合-Werror
,你可以完全防止它,如果你想。