一、命名空间
C++ 兼容 C,这意味着我们可以在 C++ 环境中编写 C 代码。不过,随着项目规模扩大,标识符冲突变得不可避免。
1. 标识符查找规则与冲突
编译器在查找标识符时,遵循从当前最内层作用域向外层查找的原则。一旦找到,就不会继续向外搜索。因此,同一作用域下不能存在同名的标识符。
举个例子,stdlib.h 中有一个 rand 函数。如果我们定义一个同名的局部变量,由于局部作用域优先级高,代码可以正常执行;但如果定义为全局变量,就会因为与头文件中的全局函数冲突而编译报错。
为了解决这个问题,引入了命名空间的概念。
2. 命名空间基础
概念
命名空间本质上是一个自定义的域,用来存放标识符,从而避免不同模块间的命名冲突。访问命名空间内的成员需要使用作用域解析运算符 ::。
语法
namespace 命名空间名 {
// 你自定义的标识符
}
解决冲突示例
#include <stdio.h>
#include <stdlib.h>
namespace mycode {
int rand = 10;
}
int main() {
printf("%d\n", mycode::rand); // 正常打印出 10
return 0;
}
3. 命名空间的嵌套
当父域中标识符仍然冲突时,可以使用嵌套命名空间。这相当于在父域里开辟多个子域。
语法
namespace 外层命名空间名 {
namespace 内层命名空间名 1 {
// 标识符
}
namespace 内层命名空间名 2 {
// 标识符
}
}
示例
#include <stdio.h>
namespace code {
namespace codeA {
a = ;
}
codeB {
a = ;
}
}
{
(, code::codeA::a);
(, code::codeB::a);
;
}


