定名空间的观念
许多初学C++的人,对付C++中的一些根基的但又不常用的观念感想恍惚,定名空间(namespace)就是这样一个观念。
C++中回收的是单一的全局变量定名空间。在这单一的空间中,假如有两个变量或函数的名字完全沟通,就会呈现斗嘴。虽然,你也可以利用差异的名字,但有时我们并不知道另一个变量也利用完全沟通的名字;有时为了措施的利便,必须利用同一名字。好比你界说了一个变量string user_name, 有大概在你挪用的某个库文件或别的的措施代码中也界说了沟通名字的变量,这就会呈现斗嘴。定名空间就是为办理C++中的变量、函数的定名斗嘴而处事的。办理的步伐就是将你的strTemp变量界说在一个差异名字的定名空间中。就仿佛张家有电视机,李家也有同样型号的电视机,但我们能区分清楚,就是因为他们分属差异的家庭。
譬喻:
#include <iostream>
#include <string>
using namespace std;
//using namespace编译指示,使在C++尺度类库中界说的名字在本措施中可以利用
//不然,iostream,string 等c++尺度类就不行见了,编译就会堕落。
//两个在差异定名空间中界说的名字沟通的变量
namespace myown1{
string user_name = "myown1";
}
namespace myown2{
string user_name = "myown2";
}
int main()
{
cout<< "\n"
<< "Hello, "
<< myown1::user_name //用定名空间限制符myown1会见变量user_name
<< "... and goodbye!\n";
cout<< "\n"
<< "Hello, "
<< myown2::user_name //用定名空间限制符myown2会见变量user_name
<< "... and goodbye!\n";
return 0;
}
虽然,我们也可以利用措施开头的预编译指示来利用定名空间中的名字。利用预编译指示的长处在于在措施中不必显式地利用定名空间限制符来会见变量。以上主措施可修改为:
int main()
{
using namespace myown1;
cout<< "\n"
<< "Hello, "
<< user_name
<< "... and goodbye!\n";
// using namespace myown2;
cout<< "\n"
<< "Hello, "
<< myown2::user_name //用定名空间限制符myown2会见变量user_name
<< "... and goodbye!\n";
return 0;
}
但第二个变量必须用定名空间限制符来会见,因为此时myown1空间中的变量已经可见,假如不加限制,编译器就会无法识别是那一个定名空间中的变量。这一点必然要留意。 以上只是初学者不清楚的一个观念,在今后的文章中还将继承接头其它的一些观念。