我正在从零开始学习C ++,因此我没有专业的C语言理解。在C ++中,你无法对任何东西进行无效指针,我理解其背后的原因。但是,我知道在C中你可以。这有什么可能的原因?它似乎是类型安全的一个巨大漏洞,对我而言,这似乎是一件坏事。
答案 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指针强制转换为指向结构的指针以访问结构。