最近我偶然发现了这样的代码:
void foo(const Bar* b) {
...
takes_nonconst_param_fn((Bar*)b);
...
Run Code Online (Sandbox Code Playgroud)
显然,开发人员并不知道他在做什么,但如果编译器没有默默地接受c-style-cast并且至少需要一个正确的const_cast,他可能会在提交之前有两次.
所以这让我思考,任何现代编译器是否都有一个开关来阻止const_castc-style-casts的语义?
防止所有出现的c-style-casts是不切实际的,并且允许它们static_和reinterpret_语义(如果仅用于某些库代码)是必要的邪恶,但我的印象是,c-style-casts的合法用法被抛弃const在C++代码库中是非常罕见的,所以也许应该可以完全禁用它?