C 中的通用指针和 C++ 中的通用指针有什么区别?

  • 本文关键字:指针 区别 C++ c++ c
  • 更新时间 :
  • 英文 :


对于我的考试,我必须解释C和C++中通用指针(void *(的差异。它们是两个不同的东西,但我找不到它们之间的区别。

在 C 中,void *指针隐式转换为任何其他指针类型。在C++中,必须明确地进行这种强制转换。

在 C 中,使用了malloc,我们有 我是否投射了 malloc 的结果?(否(;虽然 In C++malloc不受欢迎,但需要强制转换,但不包含stdlib.h是编译错误。new返回正确的指针类型。

其他事情在C++中也类似;你不应该再void *沮丧了。我只在与 C 代码或奇怪的代码优化交互时这样做,其中template <class T>使用大量T*并且可以在非泛型基类中完成大部分工作(非常罕见(。

但是,这两种语言都没有通用指针。void *void (*)()实际上并不需要具有相同的大小。void (*)()用于泛型函数指针。在 C 中,隐式强制转换为/从它是一个警告,而在 C++ 中这是一个错误。大多数人用 C 显式投射,因为禁止所有"可疑指针转换"警告是一个坏主意。

最新更新