命名空间
在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;
}
在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;
}