const_cast会永远是否导致实际的代码发射?
-
09-09-2019 - |
题
这是真的,的的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
可以翻转指针的非显著位,但任何隐式转换也可以。我不认为这种情况在现实世界中存在。
同样适用时(当偏移量是足够大的基极+偏移量)的两个不同的位模式导致相同的地址值。
不隶属于 StackOverflow