const_cast が悪である理由を実際に見つけることができない間、私はこの声明を聞き続けています。
次の例では:
template <typename T>
void OscillatorToFieldTransformer<T>::setOscillator(const SysOscillatorBase<T> &src)
{
oscillatorSrc = const_cast<SysOscillatorBase<T>*>(&src);
}
私は参照を使用しており、const を使用することで、参照が変更されないように保護しています。一方、const_cast を使用しないと、コードはコンパイルされません。ここで const_cast が悪いのはなぜですか?
同じことが次の例にも当てはまります。
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));
}
}
const_cast を使用するのがいかに悪い考え/非専門的であるかを確認できる例をいくつか教えてください。
努力していただきありがとうございます:)