我们为什么需要命名空间?

我们假设一下这种情况,在A班中,有一名同学叫周磊,在B班中,也有一名同学叫周磊,现在两个班的同学一起聚会,老师找A班的周磊,这时候他在人群中喊一声周磊肯定两个周磊都过来了,这个时候B班周磊就白跑一趟了,为了避免这种尴尬,老师只要喊“A班的周磊过来一下就行了”。在c++已经其他某些语言中,也是这个道理,在很多大型项目中,由于可能多人一起开发,难免出现相同名字的变量,这个时候我们就需要namespace了,在调用同名变量时,另外加上它的namespace,这样就避免了出错。

1.命名空间实例

//namespace study
#include<iostream>
using namespace std;
namespace first_space{
	void func(){
		cout<<"my first_space"<<endl;
	}
}
namespace second_space{
	void func(){
		cout<<"my second_space"<<endl;
	}
}
int main(){
	first_space::func();
	second_space::func();
}

2.using指令

您可以使用 using namespace 指令,这样在使用命名空间时就可以不用在前面加上命名空间的名称。这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称。

//namespace study
#include<iostream>
using namespace std;
namespace using_space{
	void beusing(){
		cout<<"I am using"<<endl;
	}
}
using namespace using_space;

//namespace using_space{
//	void beusing(){
//		cout<<"I am using"<<endl;
//	}
//}
int main(){
	beusing();

}

这里注意using namespace必须在被调用空间定义后再使用。

using 指令也可以用来指定命名空间中的特定项目。例如,如果您只打算使用 std 命名空间中的 cout 部分,您可以使用如下的语句:

#include <iostream>
using std::cout;

int main ()
{

   cout << "std::endl is used with std!" << std::endl;

   return 0;
}

3.不连续的命名空间

命名空间可以定义在几个不同的部分中,因此命名空间是由几个单独定义的部分组成的。一个命名空间的各个组成部分可以分散在多个文件中。

所以,如果命名空间中的某个组成部分需要请求定义在另一个文件中的名称,则仍然需要声明该名称。下面的命名空间定义可以是定义一个新的命名空间,也可以是为已有的命名空间增加新的元素:

namespace namespace_name {
   // 代码声明
}

4.嵌套的命名空间

在c++中,命名空间的使用是可以嵌套的。如下所示:

namespace namespace_name1 {
   // 代码声明
   namespace namespace_name2 {
      // 代码声明
   }
}

注意,引用父级命名空间并不能直接调用子空间里的变量,如下:

#include<iostream>
using namespace std;
namespace first_space{
	namespace second_space{
		int a=0,b=1;
	}
}
using namespace first_space;
int main(){
	cout<<a<<" "<<b<<endl; //错误代码,a未定义
	return 0;
}

正确调用方式如下:

#include<iostream>
using namespace std;
namespace first_space{
	namespace second_space{
		int a=0,b=1;
	}
}
using namespace first_space::second_space;
int main(){
	cout<<a<<" "<<b<<endl;
	return 0;
}
11-27 04:43