c++ - C中的泛型指针和C++中的泛型指针有哪些区别?
问题描述
对于我的考试,我必须解释void *
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 中显式转换,因为禁止所有“可疑指针转换”警告是一个坏主意。
推荐阅读
- python - 如何在 matlplotlib 中正确设置轴
- heroku - Flask-socketio 的 https、http、wss 问题无法在 Heroku 中连接
- c# - 访问程序中的窗体 - Windows 窗体可访问性对象
- mongodb - 尝试使用 mongo 事务时出现 WriteConflict (v4.0.12)
- swift - 快速查找电池充电周期数
- vuejs2 - 在child中设置父组件的数据
- python - 如何将 C 变量作为变量公开给 Python?
- excel - 将范围从一个工作簿复制到另一个工作簿并将数据粘贴到最后使用的行下方
- azure - 使用动态配置存储指定文件共享的名称
- python - 如果组内的一行满足熊猫中的特定条件,如何选择组的所有行