C++ 兼容 C 语言,这意味着我们可以在 C++ 环境下编写 C 代码。C++ 之父本贾尼·斯特劳斯特卢普在设计时充分考虑了这种兼容性。
一、命名空间
1. 标识符查找规则
在 C++ 中,标识符包括变量、函数、类、常量及命名空间等。编译器查找标识符时遵循从当前最内层作用域开始向外层查找的规则,一旦找到便停止搜索。
2. 命名冲突的本质
同一作用域下不能存在同名的标识符。例如:
#include <stdio.h>
#include <stdlib.h>
int main() {
int rand = 10;
printf("%d\n", rand); // 局部变量优先,代码可执行
}
但如果 rand 定义为全局变量:
#include <stdio.h>
#include <stdlib.h>
int rand = 10; // 与 stdlib.h 中的 rand 函数冲突
int main() {
printf("%d\n", rand); // 编译报错
}
这是因为全局作用域下 rand 既指代变量又指代函数,导致歧义。为了解决这个问题,引入了命名空间。
3. 命名空间的使用
概念
命名空间相当于一个自定义的域,用于存放标识符,避免命名冲突。访问时使用 命名空间名::标识符 的形式。
语法
namespace 命名空间名 {
// 自定义标识符
}
示例
#include <stdio.h>
#
mycode {
rand = ;
}
{
(, mycode::rand);
}


