在 C++ 中,namespace(命名空间)的核心作用是避免命名冲突(比如不同库的同名函数 / 类),其定义和使用有明确语法规则,以下是详细说明:
一、namespace 的定义
1. 普通命名空间(最常用)
语法:namespace 命名空间名 { 成员(函数、类、变量等) }
特点:可跨文件拆分(同一命名空间可在多个文件中扩展)。
// 定义命名空间 MySpace,包含函数、变量、类
namespace MySpace {
int num = 10; // 命名空间内的变量
void show() { // 命名空间内的函数
cout << "MySpace::show()" << endl;
}
class Person { // 命名空间内的类
public:
void say() { cout << "Hello from MySpace" << endl; }
};
}
2. 嵌套命名空间(命名空间内嵌套子命名空间)
语法:在父命名空间内直接定义子命名空间,用于更精细的分类。
namespace MySpace {
namespace SubSpace { // 嵌套子命名空间
void func() { cout << "MySpace::SubSpace::func()" << endl; }
}
}
// C++17 简化语法(推荐)
namespace MySpace::SubSpace {
void func() { cout << "简化嵌套命名空间" << endl; }
}
3. 匿名命名空间(无名称)
语法:namespace { 成员 }
特点:仅当前文件可见(等价于 static 全局作用域),避免文件间命名冲突。
namespace { // 匿名命名空间
void localFunc() { // 只能在当前 .cpp 文件中调用
cout << "仅当前文件可见" << endl;
}
}
二、namespace 的使用方式
1. 直接指定命名空间(最安全,无歧义)
用 ::(作用域解析符)显式指定命名空间,避免冲突。
#include <iostream>
using namespace std;
// 先定义命名空间(同上)
namespace MySpace {
int num = 10;
void show() { cout << "MySpace::show()" << endl; }
}
int main() {
cout << MySpace::num << endl; // 直接指定:命名空间名::成员
MySpace::show(); // 调用命名空间内的函数
return 0;
}
2. using 声明(引入单个成员)
语法:using 命名空间名::成员名,仅引入指定成员,不污染全局。
int main() {
using MySpace::num; // 引入 MySpace 的 num 成员
using MySpace::show; // 引入 MySpace 的 show 函数
cout << num << endl; // 直接使用,无需加命名空间
show(); // 直接调用
return 0;
}
3. using 指令(引入整个命名空间)
语法:using namespace 命名空间名,引入命名空间内所有成员,简化书写(但可能污染全局,谨慎使用)。
int main() {
using namespace MySpace; // 引入整个 MySpace 命名空间
cout << num << endl; // 直接使用所有成员
show();
return 0;
}

被折叠的 条评论
为什么被折叠?



