- 命名空间只能在全局范围内声明,不能在函数内声明
- 命名空间之间可以互相嵌套
- 命名空间是开放的,可以随时为其加入新的成员。以下方式可以为A加入新成员
namespace A{
int a=5;
}
很多行代码
namespace A{
int b=6;
}
- 命名空间的声明和实现可以分开
namespace A{
int a = 5;
void func(int a);
}
void A::func(int a){
代码
}
- 这个本来该写在第一点来着,调用命名空间内的方法或变量,使用
命名空间::方法或变量名
来调用 - 匿名命名空间仅可以在当前源文件中使用
namespace{
代码
}
- 可以给命名空间起别名
namespace verylongname{
代码
}
namespace short = verylongname;
这里的等号并不是赋值,而是取了别名
8. using可以规定命名空间的使用权限
namespace A{
int a = 10;
int funa(){
code;
}
}
using A::a;
using A::funa;
cout << a << endl;
funa();
但要注意同名的变量
- using声明碰到函数重载仍然有效。当命名空间中出现多个名字一样但参数不同的方法,调用时不会有问题,using声明了这个重载函数的所有集合
10.using声明整个命名空间
using namespace X; 在这里使用了整个命名空间的名字,所以这个命名空间的所有变量函数都可以直接使用
但要注意,声明整个命名空间,强调的是命名空间,而不是里面的变量和方法,在同一文件中出现同名的新建变量和方法不会有冲突。而是优先使用新建的。