8

const_cast是否只是告诉编译器“停止抱怨,将其视为非常量指针”的一种方式?是否存在将const_cast本身翻译成实际机器代码的情况?

4

4 回答 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 回答