命名空间
一、命名空间的using声明
1.作用域操作符号
作用域操作符(::)的含义是:编译器应从操作符左侧名字所示的作用域中寻找右侧那个名字。比如std::cin的意思就是要使用命名空间std中的名字cin。
2.使用using声明
如果每次使用std::cin这种形式编写代码会比较烦琐,这时候我们可以使用using声明,有了using声明就无须专门的前缀(命名空间::)也能使用所需的名字了。
using声明语法:
using namespace::name;
一旦使用上面的语句,就可以直接访问命名空间中的名字:
#include<iostream>
//using声明,当我们使用名字cin时,从命名空间std中获取它
using std::cin
int main(void)
{
int i;
cin >> i; //正确:cin和std::cin含义相同
cout << i; //错误:没有对应的using声明,必须使用完整的名字
std::cout << i; //正确:显示地从std中使用cout
return 0;
}
3.每个名字都需要独立的using声明
按照规定,每个using声明引入命名空间中的一个成员。例如,可以把要用到的标准库中的名字都以using声明的形式表示出来:
#include<iostream>
//通过下列using声明,我们可以使用标准库中的名字
using std::cin
using std::cout;
using std::endl;
int main(void)
{
int i;
cin >> i; //前面using声明了,可以直接使用cin
cout << "使用命名空间" << endl; 前面using声明了,可以直接使用cout和endl
return 0;
}
上述代码,一开始就有对cin,cout和endl的using声明,所以我们不用再添加std::形式的前缀就能直接使用它们。
二、using声明和using编译指令
1.限定和未限定的名称
未被装饰的名称称为未限定的名称。包含名称空间的名称被称为限定名称:
int i = 0; //i是未限定的名称
A::b; //b是限定的名称
2.using声明和using编译指令区别
我们并不希望每次使用名称时都对它进行限定,因此C++提供了两种机制来简化空间中名称的使用,分别是using声明和using编译指令。
using声明使特定的标识符可用,using编译指令使整个名称空间可用。
//using声明由限定的名称和它前面的关键字using组成
using std::cin;
//using编译指令由名称空间和它前面的关键字using namespace组成
using namespace std;
3.using声明的全局作用域
using声明在代码快外,那么它的作用域就是全局:
#include<iostream>
namespace A{
int a = 100;
}
using A::a; //对命名空间A中成员a进行声明
int main(void)
{
std::cout<<"a="<<