C++ | 高级教程 | 命名空间
👻 概念
**【问题】**在一个库中有名为 xyz() 的函数,在另一个库中也存在相同的函数 xyz(),编译器就无法判断所使用的是哪一个 xyz() 函数
**【解决】**引入了命名空间,可作为附加信息来区分不同库中相同名称的函数、类、变量等。本质是定义一个范围。
[!NOTE]
一个文件夹中可以包含多个文件夹,每个文件夹中的文件不能重名,不同文件夹中的文件可以重名
👻 定义 命名空间
👾语法格式
使用关键字 namespace
定义命名空间
namespace namespace_name {
// 代码声明
}
👾示例代码
namespace first_space{
void func(){ cout << "Inside first_space" << endl; }
}
👻 访问 命名空间
👾语法格式
使用作用域解析运算符 ::
访问命名空间相关成员
name::code; // code 可以是变量或函数
👾示例代码
namespace first_space { void func() { cout << "Inside first_space" << endl; } }
namespace second_space { void func() { cout << "Inside second_space" << endl; } }
...
first_space::func(); // 输出 Inside first_space
second_space::func(); // 输出 Inside second_space
👻 使用 命名空间
👾语法格式
使用 using namespace
语句指定要使用的命名空间,限定命名空间范围
using namespace namespace_name;
👾示例代码
namespace first_space { void func() { cout << "Inside first_space" << endl; } }
namespace second_space { void func() { cout << "Inside second_space" << endl; } }
...
using namespace first_space;
func(); // 输出 Inside first_space
👻 使用 命名空间成员
👾语法格式
使用 using
语句指定要使用的命名空间成员,相对于using namespace
语句更加细化
using namespace_name::identifier; // identifier 是命名空间 namespace_name 的成员(函数或变量)
👾示例代码
using std::cout;
using std::endl;
cout << "Hello, World!" << endl; // 直接使用 cout 和 endl
使用
using namespace std;
和using std::cout;
的区别
using namespace std
using std::cout
引入范围 std
命名空间所有标识符只引入 std::cout
标识符潜在问题 如果定义一个与 std
同名的标识符,会导致命名冲突不会引入其他不必要的标识符,减少命名冲突的可能性 代码使用 适用 小型项目(代码短,不易引入命名冲突) 大型项目(只引入需要标识符,避免潜在命名冲突)
👻 嵌套 命名空间
👾语法格式
命名空间可以嵌套,可以在一个命名空间中定义另一个命名空间
namespace namespace_name1 {
// 代码声明
namespace namespace_name2 {
// 代码声明
}
}
👾示例代码
// 命名空间
namespace first_space {
void func() { cout << "外层命名空间" << endl; }
namespace second_space {
void func() { cout << "嵌套命名空间" << endl; }
}
}
...
using namespace first_space::second_space;
func(); // 输出 嵌套命名空间