对于我的考试,我必须解释 C 和 C++ 中通用指针 ( void *
) 的差异。它们是两个不同的东西,但我找不到它们之间的区别。
最佳答案
在 C 中,a void *
指针隐式转换为任何其他指针类型。在 C++ 中,必须显式进行此转换。
在C中,malloc
使用后我们有 Do I cast the result of malloc? (不);而在 C++ 中 malloc
令人皱眉, Actor 阵容是必需的,但未能包括 stdlib.h
是一个编译错误。 new
返回正确的指针类型。
C++ 中的其他事情也类似;你不应该沮丧void *
已经很多了。我只在与 C 代码互操作或奇怪的代码优化时这样做,其中 template <class T>
使用大量T*
我可以在非泛型基类中完成大部分工作(非常罕见)。
然而,这两种语言都没有通用指针。 void *
和void (*)()
实际上并不要求大小相同。 void (*)()
用于通用函数指针。在 C 中,隐式转换为警告或隐式转换为警告,而在 C++ 中这是错误。大多数人在 C 中显式转换,因为抑制所有“可疑指针转换”警告是一个坏主意。
关于c++ - C 中的泛型指针和 C++ 中的泛型指针有哪些区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57414441/