2009-04-17 25 views

回答

5

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

+0

聪明,但不是真的:const只是属性,并不意味着你不能写(考虑可变成员)。如果您正在构思一种架构,只读和只读指针或只写指针是不同的,那么代码仍然不会在转换时生成,而是在写入本身上生成。 – Suma 2009-04-17 07:47:24

12

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

3

const_cast只是抛弃了属性的常量,仅此而已。

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*和经由*pcpci一个int const*

pcpci被初始化时,cpi的表示无法更改。

当然,如果指针对象具有不重要的位,编译器可以随机翻转它们;特别是const_cast可以翻转指针的非有效位,但是任何隐式转换也可以。我不认为这种情况在现实世界中存在。

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

相关问题