对于ANSI规范中关于更改声明为const的变量可以通过其地址进行合法修改,我感到困惑。不幸的是,我无法访问C90规范,但得到了相互冲突的指针:
关键字const不会将变量转换为常量!带有const限定符的符号仅仅意味着该符号不能用于赋值。这使得值re ad -onl y通过该符号得到;它并不阻止通过程序内部(甚至外部)的其他方法对值进行修改。(专家C编程:深层C秘密: Peter van de
引用SO C++ FAQ 。
const_cast用于将const移除或添加到变量中,它是唯一可靠的、定义的和合法的消除常数的方法。reinterpret_cast用于更改类型的解释。我以一种合理的方式理解了为什么一个const变量应该只使用const_cast传递给非const,但我不能找到一个合理的理由,使用reinterpret_cast而不是con