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

时间:2015-12-18 14:18:05

标签: c++ language-lawyer

据我所知,引入C stdlib.hcstdlib)等C库版本的原因之一是全局命名空间没有被污染。

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

那么我为什么要#include <cstdlib>然后使用std::malloc

(我正在使用g ++版本4.8.2)

1 个答案:

答案 0 :(得分:7)

曾经要求C头(*.h)仅将名称放入全局名称空间,并且相应的C ++标头仅将名称放入std。结果证明这是不切实际的,往往没有遵循。因此,标准委员会对现有做法进行了标准化,并更改了规则,以便C头必须将名称放入全局命名空间,可以将它们放入std,并且C ++标题必须将名称放入std可以将它们放入全局名称空间。

旧规则不切实际的原因很简单,它需要复制命名空间std中的所有C头内容,并且维护有两组代码需要更新。除此之外,在某些情况下,C标头由完全独立的开发团队处理。这种方法的成本太高了。

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