在C++中,namespace 是一个非常重要的概念,用于组织代码,避免名称冲突。namespace(命名空间)是一个逻辑上的代码组织单元,用于将代码(类、函数、变量等)分组,从而避免命名冲突。例如,如果两个不同的模块都有一个名为 Controller 的类,通过将它们放在不同的命名空间中,可以避免冲突。
在以往最简单的使用就是std命名空间了。
using namespace std;
cout << "hello" << endl;
// 否则就是 std::cout << "hello" << std::endl;
定义命名空间
可以在代码中使用 namespace 关键字来定义一个命名空间。
// value 和 printValue 都属于 example 命名空间
namespace example
{
int value = 10;
void printValue()
{
std::cout << "Value: " << value << std::endl;
}
}
要使用命名空间中的成员,可以使用作用域运算符 ::
example::printValue(); // 输出: Value: 10
为了简化代码,可以使用 using 指令将命名空间中的成员引入到当前作用域中。
using namespace example;
printValue(); // 直接使用,而不需要 `example::`
使用命名空间
namespace 是非常灵活的,可以出现在代码的任何地方(全局作用域、函数内部、类内部等)。
void myFunction()
{
namespace local
{
int value = 20;
void printValue()
{
std::cout << "Local Value: " << value << std::endl;
}
}
local::printValue(); // 输出: Local Value: 20
}
两个同名的命名空间使用
// module1的Controller类
namespace module1
{
class Controller
{
public:
void control()
{
std::cout << "Module1 Controller" << std::endl;
}
};
}
// module2的Controller类
namespace module2
{
class Controller
{
public:
void control()
{
std::cout << "Module2 Controller" << std::endl;
}
};
}
// 使用时不会冲突
module1::Controller c1;
c1.control(); // 输出: Module1 Controller
module2::Controller c2;
c2.control(); // 输出: Module2 Controller