我从零开始学习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. C函数指针铸造空指针
- 3. CyclicBarrier.await()函数产生空指针异常的原因是什么
- 4. 空指针的原因
- 5. 铸造指针intl
- 6. V8 - 铸造args.Data()返回空指针
- 7. 在这段代码中,可能是空指针异常的原因是什么?
- 8. 这是什么原因造成的?
- 9. 铸造指针浮动
- 10. 铸造字符指针长
- 11. 铸造8位长指针
- 12. C指针类型铸造
- 13. 铸造指针警告
- 14. 空指针异常的原因
- 15. 指针升级问题的原因是什么?
- 16. 这个指针冲突的原因是什么?
- 17. 什么可能是数字选择器空指针(与Tourguide)的原因?
- 18. 为何能的static_cast编译铸造的原料指针的智能指针
- 19. InputStream为空? openStream的原因是什么?
- 20. 什么是对象铸造?
- 21. 为什么空指针异常对象有一个空的原因字段?
- 22. C指针铸造:单个int指针双字符指针
- 23. 静态的基质铸造的指针
- 24. 是什么原因
- 25. 带指针铸造的局部变量
- 26. 简单的C++指针铸造
- 27. C#为什么空铸造后
- 28. 什么是指向指针的指针?
- 29. 针对LinkedIn API的OAuth不断返回401,这是什么原因造成的?
- 30. 铸造指针和它的地址为整型指针
很好的回答,谢谢! – Maulrus 2010-04-07 06:25:52