确实const_cast只是一种告诉编译器“停止呻吟,把它当作非const指针”的方法吗?有没有什么情况下,const_cast本身被翻译成实际的机器码?const_cast是否会导致实际的代码发射?
7
A
回答
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
可以翻转指针的非有效位,但是任何隐式转换也可以。我不认为这种情况在现实世界中存在。
当两个不同的位模式导致相同的地址值(偏移量足够大时的基准+偏移量)时,这同样适用。
相关问题
- 1. 该代码是否会导致警告
- 2. 此代码是否会导致死锁?
- 3. 是否有我的伪代码的任何实际代码?
- 4. 未执行的代码是否会导致段错误?
- 5. 以下代码是否会导致JavaScript中的内存泄漏?
- 6. Xinerama是否会导致我的代码出现问题?
- 7. 什么是导致替代JVM语言的实际用例?
- 8. 该代码块是否会导致内存泄漏?
- 9. 这个objective-c代码是否会导致内存泄漏?
- 10. 以下5行代码是否会导致内存泄漏?
- 11. 此代码是否会导致内存泄漏?
- 12. 此代码是否会导致内存泄漏问题?
- 13. 此代码是否会导致竞争状态?
- 14. 这个Javascript代码是否会导致无限循环?
- 15. 此代码是否会导致托管堆损坏?
- 16. 此WCF客户端代码是否会导致内存泄漏?
- 17. 此代码是否会导致内存泄漏?
- 18. .NET 4:托管代码是否会导致堆损坏?
- 19. 此代码是否会导致堆栈溢出? Javascript setTimeout()
- 20. ValueTypes是否会导致GC?
- 21. const_cast是否安全?
- 22. NSOperation依赖关系实际上是否导致内存泄漏?
- 23. 并发代码中的任务切换是否会导致比同步执行更快的代码?
- 24. 这是C#操作方法代码实际上发射301重定向吗?
- 25. ASP.NET自定义错误是否会覆盖实际的HTTP响应代码?
- 26. 如何验证我的Java代码是否实际发送了POST请求?
- 27. FSM与实际的java代码。不知道代码是否正确
- 28. 发布生成会导致简单的protobuf代码失败
- 29. 代码中的这种更改是否会导致严重的内存泄漏?
- 30. div位置的动画不会导致实际移动
是的,这是事实。 – user51568 2009-04-17 07:12:46