使用namespace的原因

c++ namespace

traditional namespace + new namespace

为什么使用c++的namespace

c/c++的编译模式都是把每一个.c/.cpp文件当作一个单独的编译单元,最后使用链接器进行链接成一个可执行文件。这意味这每一个cpp文件是没有办法看到其他cpp文件的内容。所以当两个cpp文件中定义相同名字的变量或者相同签名的函数的时候,只有到链接阶段才会报错甚至产生奇怪的bug。采用namespace可以有效减少变量名冲突的问题。

示例

1
2
3
namespace ns1 {
int num = 1;
}

1
2
3
namespace ns1 {
extern int num;
}
1
2
3
namespace ns2 {
int num = 2;
}
1
2
3
namespace ns2 {
extern int num;
}
1
2
3
4
5
6
#include "ns1.hpp"
#include "ns2.hpp"

int main() {
printf("%d %d", ns1::num, ns2::num);
}

static + namespace

g++如何处理namespace