名称空间
namespace TANG{
int height;
int weight;
}
namespace GAO{
int height;
int weight;
}
// 名称空间是开放的,可以把名称加入到已有名称空间中
name space TANG{
void func();
}
名称空间提供一个声明名称的区域,不同名称空间之间的名称不会发生冲突。上面两个名称空间GAO和TANG中的变量名字虽然相同但不会冲突。
使用作用域解析运算符::可以用来访问给定名称空间中的名称。
TANG::height = 2.34;
TANG::func();
using声明和using编译指令
- using声明由被限定的名称和它前面的关键字using组成,把特定名称添加到所属的声明区域中。
- using 编译指令会使某个名称空间的所有名称都可用。不再需要作用域解析运算符
- 使用using编译指令导入一个名称空间与使用多个using声明是不一样的。使用using声明,就好像声明了相应名称一样。
如果某个名称已经在函数中声明了,则不能用using声明导入相同的名称。
如果使用using编译指令导入一个名称空间,再声明一个局部名称与名称空间中某个名称同名则会隐藏名称空间中的对应名称,就像局部变量隐藏全局变量一样。
#include<iostream>
using namespace std;
namespace TANG{
int height;
int weight;
void func();
}
namespace GAO{
int length;
}
namespace TANG{
void func()
{
cout<<height*weight<<endl;
}
}
int main()
{
using GAO::length; // using声明,之后可以使用length这个名称
length = 10;
//int length; // 再声明一个和using声明同名的会发生冲突
using namespace TANG;
height = 10; // TANG::height
weight = 10;
func();
double height = 30; // 声明一个和using编译指令导入的名称空间中的某个名称同名的变量
// 会隐藏名称空间中的那个变量。
cout<<"height = " <<height<<endl;
func();
return 0;
}
名称空间可以嵌套
#include<iostream>
using namespace std;
namespace TANG{
int x;
namespace GAO{ // 嵌套名称空间
int y;
int x;
}
}
int main()
{
using namespace TANG::GAO; // 将使GAO中的名称都可以使用
y = 1;
x = 2;
cout<<x<<","<<y;
}
也可以这么做
namespace myth{
using TANG::height; // 导入这个名称空间就可以使用TANG中的height
using namespace std; // 导入这个名称空间就可以使用所有的std中的名称
}
在名称空间中使用using声明和using编译指令就相当于把相应的名称声明在这个名称空间中,导入这个名称空间就可以使用嵌套的名称。