命名空间的简单介绍
- 命名空间的定义
- 命名空间的使用
命名空间的定义
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
一个命名空间的定义包含两部分:首先是关键字namespace,随后是命名空间的名字。在命名空间名字后面是一系列由花括号括起来的声明和定义。只要能出现在全局作用域中的声明就能置于命名空间内,主要包括:类、变量(及其初始化操作)、函数(及其定义)、模板和其它命名空间。命名空间结束后无须分号,这一点与块类似。和其它名字一样,命名空间的名字也必须在定义它的作用域内保持唯一。命名空间既可以定义在全局作用域内,也可以定义在其它命名空间中,但是不能定义在函数或类的内部。
//1. 普通的命名空间
namespace N1 // N1为命名空间的名称
{
// 命名空间中的内容,既可以定义变量,也可以定义函数
int a;
int Fun(int left, int right)
{
return left + right;
}
}
//2. 命名空间可以嵌套
namespace N2
{
int a;
int b;
int Fun(int left, int right)
{
return left + right;
}
namespace N3
{
int c;
}
}
//3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
namespace N1
{
int Mul(int left, int right)
{
return left * right;
}
}
注:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
命名空间的使用
命名空间的使用有三种方式
1.加命名空间名称及作用于限定符
int main() {
cout << N1::a << endl;
cout << N1::Fun(1,3) << endl;
}
2.使用using将命名空间的成员引入
using N1::a; //注意在使用时要加分号
int main()
{
cout << N1::a << endl;
}
3.使用using namespace 命名空间名称引入
using namespace N1;
int main()
{
cout << N1::Fun(1, 3) << endl;
cout << N1::Mul(1, 1) << endl;
}