如果我有两个库,两个库中都含有一个函数名字叫fun()
那么当我在主函数调用 fun() 的时候编译器就没法判断我想调用的是哪一个函数
所以我们可以用命名空间去区分。
我们先定义一个命名空间
namespace space1 { void fun() { cout<<"in space 1"<<endl; } }
这段代码就是将函数fun() 定义在了一个叫 space1 的命名空间里
类似地,我们再写一个fun()
namespace space2 { void fun() { cout<<"in space 2"<<endl; } }
我们可以这样调用这两个同名的函数
int main(int argc, char const *argv[]) { space1::fun(); space2::fun(); }
输出如下:
in space 1 in space 2
可以像 using namespace std 那样,告诉编译器一个默认的值
using namespace space1; int main(int argc, char const *argv[]) { fun(); }
打印结果就只是space1里面的函数了
in space 1
也可以嵌套命名空间
namespace namespace_name1 { // 代码声明 namespace namespace_name2 { // 代码声明 } }
使用
// 访问 namespace_name2 中的成员 using namespace namespace_name1::namespace_name2; // 访问 namespace:name1 中的成员 using namespace namespace_name1
示例:
namespace space2 { void fun() { cout<<"in space 2"<<endl; } namespace space3 { void fun() { cout<<"in space 2::3"<<endl; } } } int main(int argc, char const *argv[]) { space2::space3::fun(); }
或者
using namespace space2::space3; int main(int argc, char const *argv[]) { fun(); }