Переключатель компилятора для отключения семантики const_cast в приведениях в стиле c? - PullRequest
6 голосов
/ 13 апреля 2011

Недавно я наткнулся на такой код:

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 ++ основаниях кода, поэтому, возможно, должна быть возможность вообще отключить его?

1 Ответ

7 голосов
/ 13 апреля 2011

GCC имеет опцию -Wcast-qual для предупреждения, когда приведение в стиле C удаляет классификатор типа.В сочетании с -Werror вы можете полностью предотвратить это, если хотите.

...