首页 > 解决方案 > C中的泛型指针和C++中的泛型指针有哪些区别?

问题描述

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

标签: c++c

解决方案


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

在 C 中,malloc使用了并且我们有Do I cast the result of malloc? (不); 虽然在 C++malloc中不受欢迎,但强制转换是必需的,但未能包含stdlib.h是编译错误。new返回正确的指针类型。

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

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


推荐阅读