命名空间

如果我有两个库,两个库中都含有一个函数名字叫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();

}

 

posted @ 2020-04-06 20:10  祁峰_1024  阅读(107)  评论(0编辑  收藏  举报