对于我的考试,我必须解释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 显式投射,因为禁止所有"可疑指针转换"警告是一个坏主意。