目录
1. 定义语法
2. 作用
3. 访问成员
4. using 的使用方式
(1) 展开整个命名空间
(2) 展开单个成员
(3) using 替代 typedef(更直观)
补充说明
5. 匿名命名空间
1.定义语法
2.特点
6. 命名空间嵌套
1.定义语法
访问方式
示例
C++17 简化写法
7. 命名空间别名
c语言允许重定义
c++要用名字空间,解决名字冲突问题(解决重定义问题)
1. 定义语法
namespace 名称 { 变量; 函数; 类; // ... }2. 作用
解决名称冲突问题(避免重定义)
3. 访问成员
空间名称::成员名示例:
namespace U1 { double PI = 3.14; int sendredbag(int a) { return a + 100; } } namespace U2 { double PI = 3.1415926; int sendredbag(int a) { return a + 500; } } int main() { //名字空间中的成员访问时:空间名称::成员名 cout << U1::sendredbag(100) << endl; // 200 cout << U2::sendredbag(100) << endl; // 600 }4. using 的使用方式
(1) 展开整个命名空间
引入指定的名字空间,将空间中的内容展开到此处
using namespace U1; int main() { cout << PI << endl; // 3.14 cout << sendredbag(100) << endl; // 200 cout << U2::PI << endl; // 仍需限定 }(2) 展开单个成员
using U1::sendredbag; int main() { cout << U1::PI << endl; // 仍需限定 cout << sendredbag(100) << endl; // 200 }(3) using 替代 typedef(更直观)
// typedef 写法 typedef int myint; // using 写法(推荐) using myint = int;补充说明
using namespace std;是将标准库的所有标识符展开,方便但不推荐在头文件中使用(容易污染全局命名空间)多个命名空间中如果都有同名函数,可以通过
空间名::函数名显式调用using类型别名比typedef更直观,尤其在模板别名时优势明显
5. 匿名命名空间
1.定义语法
namespace { // 变量、函数、类等 }2.特点
仅在当前文件内可见(类似
static的作用)不同文件中的匿名命名空间互不干扰
适合用于文件内部的“私有”全局内容
示例
// file1.cpp namespace { int hiddenVar = 42; void helper() { cout << "file1 helper" << endl; } } void test1() { hiddenVar = 100; // 直接访问 helper(); // 直接调用 }// file2.cpp(另一个文件) namespace { int hiddenVar = 99; // 与 file1 中的 hiddenVar 互不冲突 void helper() { cout << "file2 helper" << endl; } } // 这里的 hiddenVar 和 helper 与 file1 完全独立注意:匿名命名空间中的成员在当前文件中可以直接访问(不需要
::),但在其他文件中无法访问。
6. 命名空间嵌套
1.定义语法
namespace 外层 { namespace 内层 { // ... } }访问方式
外层::内层::成员示例
namespace Company { namespace ModuleA { int version = 1; void run() { cout << "ModuleA running" << endl; } } namespace ModuleB { int version = 2; void run() { cout << "ModuleB running" << endl; } } } int main() { cout << Company::ModuleA::version << endl; // 1 cout << Company::ModuleB::version << endl; // 2 Company::ModuleA::run(); // ModuleA running Company::ModuleB::run(); // ModuleB running }C++17 简化写法
// 传统写法 namespace A { namespace B { namespace C { int x = 10; } } } // C++17 简化写法 namespace A::B::C { int x = 10; } // 访问相同 cout << A::B::C::x << endl; // 10命名空间嵌套(如A::B::C)主要用在大型项目中,用来解决符号命名冲突和逻辑分层。
7. 命名空间别名
如果命名空间嵌套层级太深,可以起个别名:
namespace ShortName = Company::ModuleA::SubModule::Utils; int main() { ShortName::someFunction(); }