为什么C++需要自己版本的C标准库:Malloc/calloc/realloc/Free函数?它们看起来都完全一样.我应该更喜欢使用C++中的std::版本吗?他们的行为会不会有所不同?

推荐答案

为什么C++需要自己版本的C标准库:Malloc/calloc/realloc/Free函数?

C++之所以包含大部分C库,是因为它具有交叉兼容性.尤其是在C++的早期,很重要的一点是,C程序可以轻松地增量地转换为C++.

C中的一个大问题是名称冲突.C++引入了一种语言特性来缓解这个问题:命名空间.C++标准库在命名空间std中.由于前面提到的交叉兼容性,当使用C标准库中的名称(如<stdlib.h>)包括C继承的头时,C++标准库在全局名称空间中声明C继承的名称.

他们的行为会不会有所不同?

不是的.它们是不同命名空间中的相同函数.

Malloc/calloc/realloc/Free

我应该更喜欢使用C++中的std::版本吗?

您应该不使用C++中提到的任何函数.你几乎从来不需要它们.使用它们的一个罕见原因是,当您在用C++增量地重写C程序时,您不想在一次更改中替换所有旧代码.有时,如果需要使用需要std::free的C库,则可能需要使用std::free.

除了您提到的函数之外,C标准库中还有一些部分在C++中没有新的替代函数.在这种情况下,使用C++替代名称(如<cstdlib>)包括标题1,并引用std名称空间中的名称.

1或者在C++23中甚至更好,根本不包括头文件,而是import std;.

C++相关问答推荐

如何在C中通过转换为char * 来访问float的字节表示?

了解一些CLIPS原语数据类型

Mbed TLS:OAEP的就地en—/decryption似乎不起作用'

如何使用Python C API实现多线程程序?

警告:C++中数组下标的类型为‘char’[-Wchar-subpts]

使用AVX2的英特尔2022编译器的NaN问题&;/fp:FAST

将宏值传递给ARM链接器,该链接器将变量放置在特定位置

非正规化边缘毛刺

Setenv在c编程中的用法?

Clang警告称,`ffi_type`与`sizeof`不兼容

在Rust和C之间使用ffi时如何通过 struct 中的[U8;1]成员传递指针

为什么我会收到释放后堆使用错误?

Kdb:仅升级指定的列

为什么中断函数会以这种方式影响数组?

为什么Fread()函数会读取内容,然后光标会跳到随机位置?

浮动目标文件,数据段

如何在C中处理流水线中的a、n命令?

按字典顺序打印具有给定字符的所有可能字符串

C 语言中霍尔分区的快速排序算法

设置具有非零终止字符串的大整数