【发布时间】:2010-04-07 06:00:31
【问题描述】:
我正在从头开始学习 C++,因此我对 C 没有专业的理解。在 C++ 中,您不能将 void 指针投射到任何内容,我理解其背后的原因。但是,我知道在 C 中,你可以。可能的原因是什么?这似乎是类型安全方面的一个巨大漏洞,这(对我来说)似乎是一件坏事。
【问题讨论】:
标签: c
我正在从头开始学习 C++,因此我对 C 没有专业的理解。在 C++ 中,您不能将 void 指针投射到任何内容,我理解其背后的原因。但是,我知道在 C 中,你可以。可能的原因是什么?这似乎是类型安全方面的一个巨大漏洞,这(对我来说)似乎是一件坏事。
【问题讨论】:
标签: c
您可以将void* 转换为两种 语言中的另一个指针。也许你的意思是含蓄的。
在 C 中不必明确说明它非常方便。在 C++ 中,我们有模板,所以要编写通用代码,不需要void* 强制转换之类的。在 C 中没有选择。通用容器必须将void* 保存到对象中,重复说mydata* d = node; 比mydata* d = (mydata*)node; 要容易得多。
所以这和你说的差不多。在 C 中,类型安全通常没有像在 C++ 中那样受到重视,尤其是在涉及 void* 时,因为它被认为是指向任何东西的简单通用指针。在 C++ 中不需要这样,所以最好在处理它时明确说明。
【讨论】:
[在 C 中强制转换
void *指针] 的可能原因是什么?这不是类型安全的一个巨大漏洞吗?
这是支持多态性(即泛型编程)的唯一可能方式。没有其他方法可以制作,例如,通用哈希表。 C 中的多态性非常不安全,但它是唯一的多态性。
很高兴 C++ 具有参数多态性(模板的众多功能之一)。
【讨论】:
一个原因:如果您使用sort 对结构数组进行排序,并且您有两个结构的比较函数,则需要将 void 指针转换为指向结构的指针以访问结构的成员.
【讨论】: