【问题标题】:What are the reasons for casting a void pointer?强制转换 void 指针的原因是什么?
【发布时间】:2010-04-07 06:00:31
【问题描述】:

我正在从头开始学习 C++,因此我对 C 没有专业的理解。在 C++ 中,您不能将 void 指针投射到任何内容,我理解其背后的原因。但是,我知道在 C 中,你可以。可能的原因是什么?这似乎是类型安全方面的一个巨大漏洞,这(对我来说)似乎是一件坏事。

【问题讨论】:

    标签: c


    【解决方案1】:

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

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

    所以这和你说的差不多。在 C 中,类型安全通常没有像在 C++ 中那样受到重视,尤其是在涉及 void* 时,因为它被认为是指向任何东西的简单通用指针。在 C++ 中不需要这样,所以最好在处理它时明确说明。

    【讨论】:

      【解决方案2】:

      [在 C 中强制转换 void * 指针] 的可能原因是什么?这不是类型安全的一个巨大漏洞吗?

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2013-06-03
          • 1970-01-01
          • 2016-09-13
          • 2014-04-01
          • 2018-03-05
          • 2016-08-07
          • 2013-12-24
          • 1970-01-01
          • 2016-08-29
          相关资源
          最近更新 更多