4.1 什么是命名空间?
命名空间(Namespace)是一种将相关标识符(变量、函数、类等)组织在一起的机制,主要用于避免命名冲突。
4.2 命名空间解决的问题
在大型项目中,不同的库可能使用相同的标识符名称:
xxxxxxxxxx// 库 A 定义int max = 100;
// 库 B 定义 int max = 200;
// 这会导致冲突!解决方案:将它们放在不同的命名空间中
xxxxxxxxxxnamespace LibraryA { int max = 100;}
namespace LibraryB { int max = 200;}4.3 命名空间的定义
xxxxxxxxxxnamespace 命名空间名 { // 变量 int myVar; // 函数 void myFunction(); // 类 class MyClass { }; // 嵌套命名空间 namespace Inner { int innerVar; }}4.4 使用命名空间的方法
方法 1:使用 using namespace(最简单)
xxxxxxxxxxusing namespace std; // 使用整个 std 命名空间
int main() { cout << "hello" << endl; // 直接使用,不需要 std:: return 0;}缺点:可能引入命名冲突(尤其是在大型项目中)
方法 2:使用 using 声明特定成员
xxxxxxxxxxusing std::cout; // 只引入 coutusing std::endl; // 只引入 endl
int main() { cout << "hello" << endl; return 0;}方法 3:使用作用域解析运算符 ::(最安全)
xxxxxxxxxxint main() { std::cout << "hello" << std::endl; // 明确指定命名空间 return 0;}4.5 命名空间嵌套
xxxxxxxxxx/* ns-embed.cpp */using namespace std;
// 定义命名空间namespace sysu { namespace students { int collegeCount; void printColleges(); }}
// 函数定义(在命名空间外,需要使用完整限定名)void sysu::students::printColleges() { cout << "Colleges " << collegeCount << endl;}
int main() { sysu::students::collegeCount = 5; sysu::students::printColleges(); return 0;}4.6 命名冲突示例
xxxxxxxxxx/* ns-helloworld.cpp */using namespace std;
int main() { const char *cout = "hello world c++!"; // 定义了名为 cout 的变量 // 这里会报错!因为 cout 已经被定义 // cout << cout << endl; // 错误! // 正确做法:使用 std:: 前缀 std::cout << cout << endl; // 正确:std::cout 是标准输出的 cout return 0;}说明:
using namespace std;会将std命名空间的所有成员引入当前作用域本地变量
cout覆盖了std::cout使用
std::cout可以明确指定使用命名空间中的cout
4.7 std 命名空间
C++ 标准库的所有内容都放在 std 命名空间中:
| 组件 | 说明 |
|---|---|
std::cout | 标准输出 |
std::cin | 标准输入 |
std::endl | 换行符 |
std::string | 字符串类 |
std::vector | 动态数组 |
std::map | 映射表 |
24,526字