c++ - 为什么必须在 C++ 中显式类型转换 malloc 和 calloc?
问题描述
我最近读了一篇文章,它说在 C 中没有必要显式地对 malloc 和 calloc 进行类型转换,但在 C++ 中它是强制性的。为什么会这样?谁能解释一下?
解决方案
因为在 C 中,您经常需要在void *
各种情况下使用它。其中一些是用于回调的 cookie - 当您提供指向用户数据的指针并且您无法知道该数据类型时。或者通用函数,比如qsort()
它们必须在不事先知道它们的类型的情况下处理各种数据。尽管在 C++ 中您不需要void *
经常使用它们,但在良好的安全代码中您根本不需要使用它们,因为您有模板,因此您可以使用未知类型编写通用代码,而不会进行不安全的转换。因此,C++ 的创建者希望激发对数据类型的正确使用,并确保当开发人员进行不安全的操作时,他/她/它/他们了解他/她/它/他们在做什么。
作为malloc()
和calloc()
返回void *
,您必须在 C++ 中显式转换它们。请注意,您不应该在 C++ 中使用它们,而是使用operator new
- 它已经返回正确的指针类型并且您不需要强制转换。甚至在现代 C++ 中,甚至不建议new
直接调用。
推荐阅读
- java - 如何防止用户在错误的时间和日期访问我的应用程序?
- shell - Why I'm getting these Errors - unexpected EOF while looking for matching `)'
- javascript - Spring Boot is not loading CSS and JS files properly
- python - 使用pickle文件python登录用户名和密码
- java - How to send data after switching from one activity to another?
- javascript - DOMExecption error when installing service worker
- linux-kernel - 无法挂载 /boot
- python - Python:将用户定义的数据动态插入二维列表
- python - GCal Python: Create new event without any time (only date)?
- c++11 - Returning lvalue reference causes a closure?