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

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

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

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

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

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

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

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

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