这是真的,的的const_cast 的仅仅是一种方式来告诉编译器“停止呻吟,把它当作一个非const指针”?是否有任何情况下,当的const_cast 的本身被转换成实际的机器代码?

有帮助吗?

解决方案

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

其他提示

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

的const_cast只是扔掉的属性,仅此而已的常量性。

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可以翻转指针的非显著位,但任何隐式转换也可以。我不认为这种情况在现实世界中存在。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top