命名空间
名字冲突的痛苦
C 和 C++ 里,变量、函数和类名默认都堆在全局作用域里,冲突是家常便饭。一个叫做 rand 的整型变量就可能跟标准库里的 rand() 过不去。
#include <stdio.h>
#include <stdlib.h>
int rand = 6;
int main() {
printf("%d", rand);
}
命名空间就是为了把名字圈进独立的小隔间,互不干扰。C++ 的做法:
#include <stdio.h>
namespace m {
int rand = 6;
}
int main() {
printf("%d", m::rand);
}
定义与隔离
用 namespace 关键字划出一个域,里面放变量、函数或类型,跟全局隔开。不同域里同名是完全合法的。编译器查找名字时只看你所在的域(局部、全局、命名空间或类)。局部域和全局域还影响生命周期,命名空间域和类域则不影响。
namespace m {
int a = 6;
int Add(int a, int b) {
return a + b;
}
struct Node {
struct Node* next;
int val;
};
}
支持嵌套,同一个命名空间可以散在不同文件里自动合并。标准库的东西基本都关在 std 里。
namespace m {
n {
a = ;
b = ;
}
c = ;
}


