我一直认为,如果你做#include <cheader>
(其中header
就像STDIO/STDLIB /串一些标准C++头),它是相同的是#include <header.h>
,但裹入std
命名空间。那么代码片段如何编译(g ++ 4.7.3)?为什么使用<cheader>代替<header.h>?
#include <cstdlib>
int main()
{
malloc(1);
return 0;
}
为什么一个包括<cstdio>
然后(而不是<stdio.h>
)如果标准C函数将在全局命名空间呢?
而第二个问题是 - 我应该怎么做才能一些功能进行全局命名空间的(同时使用C++头文件在同一时间)?举例来说,我不想malloc
是在全局命名空间,因为我有一个家庭作业:写我自己的内存分配器(特别是malloc
和free
功能),我会编译成动态库,并使用插入任何程序LD_PRELOAD
。
因为不幸的是,实现*允许*名称在'std ::'名称空间之外,以及* required *在它们之内。 – juanchopanza
@juanchopanza但如果我们允许标准头文件混淆全局名称空间,那么使用名称空间'std'有什么意义? – karlicoss
@ karlicoss!这就是为什么我认为这是“不幸”。它仅适用于来自标准C库的名称。所有标准的C++函数和类型都在'std ::'命名空间中。 – juanchopanza