首页 > 解决方案 > 为什么必须在 C++ 中显式类型转换 malloc 和 calloc?

问题描述

我最近读了一篇文章,它说在 C 中没有必要显式地对 malloc 和 calloc 进行类型转换,但在 C++ 中它是强制性的。为什么会这样?谁能解释一下?

标签: c++malloccalloc

解决方案


因为在 C 中,您经常需要在void *各种情况下使用它。其中一些是用于回调的 cookie - 当您提供指向用户数据的指针并且您无法知道该数据类型时。或者通用函数,比如qsort()它们必须在不事先知道它们的类型的情况下处理各种数据。尽管在 C++ 中您不需要void *经常使用它们,但在良好的安全代码中您根本不需要使用它们,因为您有模板,因此您可以使用未知类型编写通用代码,而不会进行不安全的转换。因此,C++ 的创建者希望激发对数据类型的正确使用,并确保当开发人员进行不安全的操作时,他/她/它/他们了解他/她/它/他们在做什么。

作为malloc()calloc()返回void *,您必须在 C++ 中显式转换它们。请注意,您不应该在 C++ 中使用它们,而是使用operator new- 它已经返回正确的指针类型并且您不需要强制转换。甚至在现代 C++ 中,甚至不建议new直接调用。


推荐阅读