命名空间
内容简介
命名空间用于组织代码并避免名称冲突。它相当于给变量、函数、类增加一层逻辑作用域,是 C++ 项目和标准库的基础机制。
用法
定义和访问
namespace Math {
int add(int a, int b)
{
return a + b;
}
}
int result = Math::add(1, 2);using 声明
using Math::add;
int result = add(1, 2);using namespace
using namespace Math;
int result = add(1, 2);嵌套命名空间
namespace Company::Project {
void run();
}命名空间别名
namespace fs = std::filesystem;匿名命名空间
namespace {
int file_only_value = 0;
void helper() {}
}匿名命名空间中的内容只在当前编译单元内可见。
最佳代码实践
- 头文件中不要写
using namespace std;。 - 需要少量名称时优先使用
using std::cout;这种 using 声明。 - 库代码使用稳定、清晰的顶层命名空间,例如
mylib。 - 文件内部辅助函数和变量可放进匿名命名空间。
- 命名空间可以分多处定义,编译器会自动合并。
错误用法
// header.h
using namespace std; // 错误:污染所有包含此头文件的源文件namespace A { int value = 1; }
namespace B { int value = 2; }
using namespace A;
using namespace B;
std::cout << value; // 错误:二义性注意事项
- 标准库都在
std命名空间中,例如std::vector、std::cout。 inline namespace常用于库版本管理,普通业务代码不常用。- 命名空间解决的是名字冲突,不负责封装对象状态;封装仍然依赖类和模块设计。