前言
每次编写C++程序都几乎不可避免的写一句:
using namespace std;
却不知道是为什么?看看这篇,看完就懂了。
一、什么是命名空间
命名空间是程序设计者命名的内存区域,程序设计者根据需指定一些有名字的空间域,把一些全局实体分别存放到各个命名空间中,从而与其他全局实体分隔开。 通俗的说,每个名字空间都是一个名字空间域,存放在名字空间域中的全局实体只在本空间域内有效。
二、为什么要有有命名空间
在实际的系统开发中,所有的开发工作,通常都不会仅由一个人来开发完成,不同的人只负责自己功能模块,他们在设计时,比如声明变量,通常情况下,不会考虑其他人是否已使用该变量名,在模块功能测试时,相互之间是独立的,完全没有问题,当系统功能合成时,不可避免地会出现变量或函数的命名冲突,因为变量或函数重名而导致的问题将会造成一定的混乱。
一句话:命名空间目的是给一个变量或者函数一个限制的作用域,从而解决命名冲突。
三、如何使用命名空间
1、基本语法:
namespace 命名空间名字
{
}
注意最后面不用加;
2、使用方式(以命名空间为SpaceA为例)
1)在导入using namespace SpaceA,就可以直接使用SpaceA中的变量和函数。
2)在导入using SpaceA::a ,就只能单独使用a。
3)在不导入命名空间的情况下,使用命名空间::成员(SpaceA::a)的方式来访问。
4)在导入命名空间的情况下,使用命名空间::成员(SpaceA::a)的方式来访问。(推荐使用)
注意1)和2)的方式有局限性,当其他命名空间的成员名称相同时,会出现模糊,不建议使用。
3、案例
#include <iostream> using namespace std; namespace SpaceA { int a = 10; } using namespace SpaceA; int main() { // 在导入using namespace SpaceA后,可以直接用SpaceA中的变量 cout << "SpaceA::a = " << a << endl; return 0; }
#include <iostream> using namespace std; namespace SpaceA { int a = 10; } using SpaceA::a; int main() { // 在导入using SpaceA::a后,可以直接用a cout << "SpaceA::a = " << a << endl; return 0; }
#include <iostream> using namespace std; namespace SpaceA { int a = 10; } // using SpaceA::a; int main() { // 不管是否导入命名空间,都可以直接用SpaceA::a cout << "SpaceA::a = " << SpaceA::a << endl; return 0; }
4、可以不用再写using namespace std;
std是一个C++的标准命名空间,C语言中没有命名空间的说法,所以C语言只用导入头文件就可以了。下面演示不写using namespace std;来进行输入输出。其实,看到这里,应该都知道怎么写了,除非你没有认真看。
#include <iostream> int main() { int a; std::cin >> a; // 使用命名空间::成员来访问 std::cout << "a = " << a << std::endl; return 0; }
四、总结
命名空间是用来解决命名冲突的,推荐使用命名空间::成员的方式来访问成员。