2010-04-07 80 views
6

我从零开始学习C++,因此我没有对C的专家理解。在C++中,您不能将无效指针指向任何内容,并且我理解其背后的原因。不过,我知道在C中,你可以。这有什么可能的原因?这看起来好像是一个类型安全的巨大漏洞,对我来说这似乎是一件坏事。铸造空指针的原因是什么?

回答

13

您可以将void*投射到另一个这两个语言的指针上。也许你的含义是含蓄的。

在C中非常方便,无需对其进行明确说明。在C++中,我们有模板,所以要编写通用代码,不需要void*强制转换等等。在C中没有选择。通用容器必须将void*保存为对象,并且重复说mydata* d = node;然后它是mydata* d = (mydata*)node;要容易得多。

所以,这几乎就像你说的。在C类中,安全性一般没有像在C++中那样受到重视,特别是当它涉及到void*时,因为它被假设为一个简单的通用指针。在C++中没有必要这么做,所以在处理它时最好明确。

+0

很好的回答,谢谢! – Maulrus 2010-04-07 06:25:52

0

原因之一:如果您使用sort对结构数组进行排序,并且您有两个结构的比较函数,则需要将空指针转换为指向结构成员的结构的指针。

1

什么是[用C铸造void *指针]可能的原因是什么?这是不是类型安全的巨大漏洞?

这是支持多态的唯一可能的方式,也就是通用编程。没有其他的方法可以制作,例如一个通用的散列表。 C中的多态性是非常不安全的,但它是唯一的多态现象。

很高兴C++具有参数多态性(模板的许多功能之一)。