据我所知,引入C stdlib.h
(cstdlib
)等C库版本的原因之一是全局命名空间没有被污染。
但事实证明,即使我没有malloc
,我也可以在全局命名空间中使用#include <stdlib.h>
。
那么我为什么要#include <cstdlib>
然后使用std::malloc
?
(我正在使用g ++版本4.8.2)
答案 0 :(得分:7)
曾经要求C头(*.h
)仅将名称放入全局名称空间,并且相应的C ++标头仅将名称放入std
。结果证明这是不切实际的,往往没有遵循。因此,标准委员会对现有做法进行了标准化,并更改了规则,以便C头必须将名称放入全局命名空间,可以将它们放入std
,并且C ++标题必须将名称放入std
,可以将它们放入全局名称空间。
旧规则不切实际的原因很简单,它需要复制命名空间std
中的所有C头内容,并且维护有两组代码需要更新。除此之外,在某些情况下,C标头由完全独立的开发团队处理。这种方法的成本太高了。
要回答最后一个问题,请使用#include <stdlib.h>
和malloc
或使用#include <cstdlib>
和std::malloc
。