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