c++中的命名空间

来源:互联网 发布:重庆装修网络推广 编辑:程序博客网 时间:2024/06/07 00:42
命名空间
在C++中我们经常会碰到"using namespace"等字符,namespace就是命名空间,而using 属于声明;
1  命名空间的概念
 C++中采用单一的全局变量的命名空间,如果在一个空间中,两个变量或函数的名字一样,编译的时候就会
 冲突。命名空间就是为了解决C++中函数变量的命名冲突所采取的一种措施,能够解决多模块协同开发出现
 变量函数命名的冲突问题。
     在这里面可以把命名空间理解成文件夹,如果你在hel1这个文件夹中编辑两个hello.cpp肯定会出问题,但是如果
 一个在hel1,一个在hel2这个文件夹中p,这个就不会出现冲突。
 命名空间的必要性: 当程序比较大的时候,需要多人合作,命名空间就非常必要。
 
2  命名空间的定义
命名空间用namespace定义,格式如下:
namespace  命名空间名
{
   命名空间生命内容
}




例:
#include  <iostream>
using namespace std;     


namespace nsA
{
    void print()
    {
        cout<<"nsA"<<endl;
    }
}


namespace nsB
{
    void print()
    {
        cout<<"nsB"<<endl;
    }
}




int main()
{
    nsA::print();
    nsB::print();
    return  0;
}




3  命名空间成员的使用
3.1  using 声明
    using声明可以出现在全局域和任意命名空间中,也可以出现在局部域中。
    using  namespace_name::name;
    一旦使用using声明,就可以直接引用命名空间中的成员,而不需要再引用该成员的
    命名空间。
    命名空间std,这是最常用的命名空间,而不需要再引用该成员的命名空间。
    #include <string>
    #include <iostream>
    using std::cin;     //using声明,表明要引用标准库std中的成员cin;
    using std::string;  //using声明,表明要引用标准库std中的成员string;    
    
    int main()
    {
        string temp;   //正确,string已经声明,可以直接使用
        cin>>temp;     //正确,cin已经声明,可以直接使用
        cout<<temp;    //错误,cout未声明,无法直接使用
        std::cout<<temp; //正确,通过全名使用cout,
        
        return 0;
    }




在using 指令中,using后面必须跟关键字namespace,而且最后必须为命名空间名;
using 声明中,关键字后面没有namespace, 后面必须为命名空间的成员名。


3.2  using的作用域


#include <iostream>
using namespace  std;


namespace nsA{
    int var = 12;
}


namespace nsB{
    double var = 12.33;
}


int main()
{
    {
        using  namespace nsA;   //using指令,使用nsA
        cout<<"nsA var="<<var<<endl;
    }
    {
        using  namespace nsB;   //using指令,使用nsB
        cout<<"nsB var="<<var<<endl;
    }
    
    return 0;
}
原创粉丝点击