Недавно я наткнулся на такой код:
void foo(const Bar* b) {
...
takes_nonconst_param_fn((Bar*)b);
...
Очевидно, что разработчик не знал, что он делал, но если компилятор не принял молча c-style-cast и, по крайней мере, требовал правильного const_cast
, он мог бы, хотя бы дважды, совершить это.
Так что это заставило меня задуматься, есть ли в современных компиляторах переключатель для предотвращения const_cast
семантики для приведения в стиле c?
Просто не практично предотвращать все случаи приведения типов в стиле c, и это неизбежное зло, чтобы допустить их семантику static_
и reinterpret_
(если только для некоторого библиотечного кода), но у меня сложилось впечатление, что это законное использование приведение c-style-cast для отбрасывания константности очень редко встречается в C ++ основаниях кода, поэтому, возможно, должна быть возможность вообще отключить его?