一、命名空间
01)定义
在 C/C++ 中,变量、函数和类大量存在,若都放在全局作用域,极易产生名称冲突。使用命名空间的目的是对标识符进行本地化,避免名字污染。namespace 关键字正是为了解决这一问题而设计的。
例如,标准库中的 rand 是函数,如果我们在代码中定义同名变量,编译器就会报错:
#include <stdio.h>
#include <stdlib.h>
int rand = 10;
int main() {
// 编译报错:error C2365: 'rand': 重定义;以前的定义是'函数'
printf("%d\n", rand);
return 0;
}
简单来说,namespace 允许我们用相同的名字做不同的事。定义时只需使用 namespace 关键字后跟名字,再接一对 {},其中即为成员。
- 本质:定义出一个独立的域,与全局域隔离。不同域可定义同名变量。
- 作用域类型:C++ 中有函数局部域、全局域、命名空间域、类域。域决定了编译时查找变量的逻辑,从而解决冲突。
- 生命周期:局部域和全局域影响变量生命周期,命名空间域和类域不影响。
- 嵌套与合并:
namespace只能定义在全局,但可以嵌套。工程中多文件定义的同名 namespace 会被视为同一个,不会冲突。 - 标准库:C++ 标准库都放在名为
std(standard) 的命名空间中。
namespace bit {
int rand = 10;
int Add(int left, int right) {
return left + right;
}
struct Node {
struct Node* next;
int val;
};
}
02)使用
默认情况下,编译器只在局部或全局查找变量,不会去命名空间里找。因此直接使用命名空间内的成员会报错。有三种访问方式:

