我从零开始学习C++,因此我没有对C的专家理解。在C++中,您不能将无效指针指向任何内容,并且我理解其背后的原因。不过,我知道在C中,你可以。这有什么可能的原因?这看起来好像是一个类型安全的巨大漏洞,对我来说这似乎是一件坏事。铸造空指针的原因是什么?
6
A
回答
13
您可以将void*
投射到另一个这两个语言的指针上。也许你的含义是含蓄的。
在C中非常方便,无需对其进行明确说明。在C++中,我们有模板,所以要编写通用代码,不需要void*
强制转换等等。在C中没有选择。通用容器必须将void*
保存为对象,并且重复说mydata* d = node;
然后它是mydata* d = (mydata*)node;
要容易得多。
所以,这几乎就像你说的。在C类中,安全性一般没有像在C++中那样受到重视,特别是当它涉及到void*
时,因为它被假设为一个简单的通用指针。在C++中没有必要这么做,所以在处理它时最好明确。
0
原因之一:如果您使用sort
对结构数组进行排序,并且您有两个结构的比较函数,则需要将空指针转换为指向结构成员的结构的指针。
1
什么是[用C铸造
void *
指针]可能的原因是什么?这是不是类型安全的巨大漏洞?
这是支持多态的唯一可能的方式,也就是通用编程。没有其他的方法可以制作,例如一个通用的散列表。 C中的多态性是非常不安全的,但它是唯一的多态现象。
很高兴C++具有参数多态性(模板的许多功能之一)。
相关问题
- 1. 是什么原因造成我的空指针异常
- 2. 铸造空指针
- 3. 铸造空指针
- 4. 铸造虚空指针
- 5. C函数指针铸造空指针
- 6. CyclicBarrier.await()函数产生空指针异常的原因是什么
- 7. 空指针异常的原因是什么
- 8. 空指针的原因
- 9. 铸造指针intl
- 10. C,铸造通过/空指针
- 11. V8 - 铸造args.Data()返回空指针
- 12. 铸造空指针跨越DLL
- 13. CreateIndexBuffer()崩溃,某种指针错误。可能是什么原因造成的?
- 14. 在这段代码中,可能是空指针异常的原因是什么?
- 15. 指针 - 铸造结构指针+ Malloc
- 16. 铸造指针警告
- 17. C指针类型铸造
- 18. 函数指针铸造
- 19. 德尔福指针铸造
- 20. 铸造和添加指针
- 21. 铸造指针浮动
- 22. 铸造指针警告
- 23. 铸造字符指针长
- 24. 铸造8位长指针
- 25. 空指针异常的原因
- 26. 型铸造的指针调用构造
- 27. 为什么指针算术是段错误的原因?
- 28. 指针升级问题的原因是什么?
- 29. 这个指针冲突的原因是什么?
- 30. 是什么原因造成process.hrtime()挂在
很好的回答,谢谢! – Maulrus 2010-04-07 06:25:52