const_cast是否会导致实际的代码发射?

时间:2009-04-17 07:04:43

标签: c++ const memory-model const-cast data-representation

const_cast 是否只是一种告诉编译器“停止呻吟,将其视为非常量指针”的方法?是否有任何情况将 const_cast 本身转换为实际的机器代码?

4 个答案:

答案 0 :(得分:12)

不,它只是在编译时删除了const属性。

答案 1 :(得分:5)

可以想象,可能存在一种架构,其中const指针与非const指针具有不同的表示,在这种情况下,编译器必须发出一些代码。但是,我不知道任何这样的架构。

答案 2 :(得分:3)

const_cast只会丢弃属性的常量而已。

答案 3 :(得分: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可以翻转指针的非重要位,但任何隐式转换也可以。我不认为这种情况存在于现实世界中。

当两个不同的位模式导致相同的地址值(当偏移量足够大时,基数+偏移量)时,同样适用。