为什么malloc在全局命名空间中

Why is malloc in global namespace?

本文关键字:命名空间 全局 malloc 为什么      更新时间:2023-10-16

据我所知,引入C++版本的C库(如stdlib.hcstdlib))的原因之一是为了不污染全局命名空间。

但事实证明,我可以在全局命名空间中使用malloc,即使我没有使用#include <stdlib.h>

那么,为什么我应该先使用#include <cstdlib>,然后再使用std::malloc呢?

(我使用的是g++版本4.8.2)

过去有一个要求,即C标头(*.h)只将名称放入全局命名空间,而相应的C++标头只将名称放在std中。事实证明,这是不切实际的,而且经常得不到遵守。因此,标准委员会对现有做法进行了标准化,并更改了规则,使C头文件必须将名称放入全局命名空间,可以放入std,C++头文件

旧规则不切实际的原因很简单,因为它需要复制名称空间std内的所有C头内容,而相应的维护负担是要更新两组代码。此外,在某些情况下,C头文件由一个完全独立的开发团队处理。这种方法的成本令人望而却步。

要回答最后一个问题,请使用#include <stdlib.h>malloc或使用#include <cstdlib>std::malloc