我一直听到这个说法,虽然我真的找不到 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 是一个坏主意/不专业。
感谢您的任何努力:)