C ++: почему const_cast злой?

Я продолжаю слышать это заявление, хотя не могу найти причину, по которой const_cast является злом.

В следующем примере:

<code>template <typename T>
void OscillatorToFieldTransformer<T>::setOscillator(const SysOscillatorBase<T> &src)
{
    oscillatorSrc = const_cast<SysOscillatorBase<T>*>(&src);
}
</code>

Я использую ссылку, и с помощью const я защищаю свою ссылку от изменения. С другой стороны, если я не использую const_cast, код не будет компилироваться. Почему const_cast здесь плохой?

То же самое относится к следующему примеру:

<code>template <typename T>
void SysSystemBase<T>::addOscillator(const SysOscillatorBase<T> &src)
{
    bool alreadyThere = 0;
    for(unsigned long i = 0; i < oscillators.size(); i++)
    {
        if(&src == oscillators[i])
        {
            alreadyThere = 1;
            break;
        }
    }
    if(!alreadyThere)
    {
        oscillators.push_back(const_cast<SysOscillatorBase<T>*>(&src));
    }
}
</code>

Пожалуйста, предоставьте мне несколько примеров, в которых я могу видеть, как плохая идея / непрофессионально использовать const_cast.

Спасибо за любые усилия

Ответы на вопрос(9)

Ваш ответ на вопрос