抛出void指针的原因是什么?

时间:2010-04-07 06:00:32

标签: c

我正在从零开始学习C ++,因此我没有专业的C语言理解。在C ++中,你无法对任何东西进行无效指针,我理解其背后的原因。但是,我知道在C中你可以。这有什么可能的原因?它似乎是类型安全的一个巨大漏洞,对我而言,这似乎是一件坏事。

3 个答案:

答案 0 :(得分:13)

您可以将void*转换为两种语言中的另一个指针。也许你含蓄地暗示。

在C中非常方便,不必明确它。在C ++中我们有模板,所以要编写通用代码,不需要void*转换和诸如此类的东西。在C中没有选择。通用容器必须将void*保留在对象上,并且反复说mydata* d = node;然后它是mydata* d = (mydata*)node;会更容易。

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

答案 1 :(得分:1)

  

[在C中投射void *指针的可能原因是什么?这不是类型安全的巨大漏洞吗?

这是支持多态的唯一可行方法,即通用编程。没有其他方法可以制作,例如,通用哈希表。 C中的多态性非常不安全,但它是唯一的多态性。

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

答案 2 :(得分:0)

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