c++ - C 中的泛型指针和 C++ 中的泛型指针有哪些区别?

标签 c++ c

对于我的考试,我必须解释 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/

相关文章:

c - 如何知道进程是父进程还是子进程

c++ - 如何使用一些完全用 C\C++ 编程语言编写的库将 pcm 音频转换为文本?

c - 为什么 getaddrinfo() 在函数的输入部分返回一个值?

c - 临时文件与 malloc(在 C 中)

c++ - 无法读取代码页不匹配的 FileVersionInfo

c++ - 无法消除警告 C4554

c++ - istream >> ostream << 使用 * 指针重载运算符

javascript - C++11 std::regex_replace() 创建带有特定字符串问题的正则表达式

c++ - 固定限制的循环更快

c - 在 C 中使用两个名称调用同一个函数的首选方法