命名空间的使用方法
#include "stdafx.h"
#include <iostream>
using namespace std; //标准库的命名空间 解包了所有此空间下的内容
//命名空间的关键字(key word) namespace + 空间名
namespace Space
{
int x;
int y;
}
namespace Other
{
int x;
int y;
}
int _tmain(int argc, _TCHAR* argv[])
{
Space::x = 200; //直接带前坠使用
cout << Space::x << endl;
using Space::x; //相当于将Space中的x解包到此作用域下
//之后可以直接对x进行操作 但是不能与本作用域中原有变量冲突
x = 20;
cout << x << endl;
//using namespace Space; 将此命名空间中所有内容解包到此作用域
return 0;
}
命名空间的嵌套
#include "stdafx.h"
#include <iostream>
using namespace std;
//命名空间的关键字(key word) namespace + 空间名
namespace Space
{
int x;
int y;
namespace Other //命名空间的嵌套
{
int m;
int n;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
using namespace Space::Other;
//只有解开里面嵌套的命名空间才能用里面的值
m = 20;
cout << m << endl;
return 0;
}
命名空间的作用、用途
作用:命名空间是程序设计者命名的内存区域,程序设计者根据需指定一些有名字的空间域,把一些全局实体分别存放到各个命名空间中,从而与其他全局实体分隔开,通俗的说,每个名字空间都是一个名字空间域,存放在名字空间域中的全局实体只在本空间域内有效,名字空间对全局实体加以域的限制,从而合理的解决命名冲突,命名空间就是为了避免可能的名字冲突,保持代码的局域性。
协同开发:
因为同名的命名空间可以融合,所以当多人开发时,可以将自己的内容都裹上同一个名字的命名空间,具体操作是 例如你开发一个类 将它的头文件、和cpp文件中都用命名空间包装好,当多个文件合一起后 include相应头文件 在解开统一的命名空间,就可以使用里面的内容。
协同开发:
因为同名的命名空间可以融合,所以当多人开发时,可以将自己的内容都裹上同一个名字的命名空间,具体操作是 例如你开发一个类 将它的头文件、和cpp文件中都用命名空间包装好,当多个文件合一起后 include相应头文件 在解开统一的命名空间,就可以使用里面的内容。
无名命名空间
定义无名命名空间后,外部不能得知无名命名空间的成员名字,即不让外部知道我的成员名字及其调用,由于没有名字所以其他文件无法引用,它只能在本文件的作用域内有效,它的作用域:从无名命名空间声明开始到本文件结束,在本文件使用无名命名空间成员时不必用命名空间限定,其实无名命名空间和static是同样的道理,都是只在本文件内有效,无法被其他文件引用。
namespace
{
int a = 100;
void foo() { cout << "foo" << endl; }
}
int main()
{
cout << a << endl;
foo();
}
note:
- 无名命名空间允许无限定的使用其成员函数,并且为它提供了内部连接(
只有在定义的文件内可以使用
) - 命名空间不需要命名,它的成员不需要限定就可以使用。
- 如果在一个文件中包含了两个相同成员的无名命名空间,其含义是不明确的,会导致重复定义的错误。
无名命名空间可以替代全局作用域的static数据成员