C ++: Por que o mal const_cast?

Eu continuo ouvindo essa afirmação, enquanto não consigo encontrar a razão pela qual const_cast é o mal.

No exemplo a seguir:

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

Estou usando uma referência e, usando const, estou protegendo minha referência de ser alterada. Por outro lado, se eu não usar const_cast, o código não será compilado. Por que o const_cast seria ruim aqui?

O mesmo se aplica ao seguinte exemplo:

<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>

Por favor me forneça alguns exemplos, nos quais eu posso ver como é uma má idéia / não profissional usar um const_cast.

Obrigado por qualquer esforço :)

questionAnswers(9)

yourAnswerToTheQuestion