const_cast是否只是告诉编译器“停止抱怨,将其视为非常量指针”的一种方式?是否存在将const_cast本身翻译成实际机器代码的情况?
问问题
408 次
4 回答
12
不,它只是在编译时删除 const 属性。
于 2009-04-17T07:11:59.237 回答
5
可以想象,可能存在 const 指针与非 const 指针具有不同表示的架构,在这种情况下,编译器将不得不发出一些代码。但是,我不知道有任何这样的架构。
于 2009-04-17T07:24:39.033 回答
3
const_cast 只是丢弃了属性的常量性,仅此而已。
于 2009-04-17T07:20:13.397 回答
2
const
不会改变类型的表示,特别是 的表示T*
与T const*
.
考虑:
int i,
* const cpi = &i,
* const * pcpi = &cpi;
int const * const * pcpci = pcpi; // cpi is now int const*
的表示cpi
同时表示一个int*
和一个int const*
通孔*pcpci
。
初始化时的表示cpi
无法更改。pcpci
当然,如果指针对象有非有效位,编译器可以随机翻转它们;特别是,const_cast
可以翻转指针的非有效位,但任何隐式转换也可以。我认为这种情况在现实世界中是不存在的。
当两个不同的位模式导致相同的地址值(当偏移量足够大时基数+偏移量)时,同样适用。
于 2012-07-20T18:53:48.877 回答