首页 > 代码库 > c++新增的名字空间namespace

c++新增的名字空间namespace

其实c也有此名字空间的概念

防止命名冲突,尤其是大型程序里很有用,节省精力,以免出错。可以全部引进,可以引进部分,还可以一个都不用。无所谓。

using namespace std;  //标准库的名字都放在std里面

 1 #include <iostream> 2 #include <string> 3 using namespace std;//标准库里的东西都可以用了。一劳永逸的方法 4 int main() 5 { 6     cout << "请输入姓名:" <<endl; 7     string name; 8     int age; 9     cin >> name >> age;10     cout << name << "您好,您的年龄:" << age 11         << endl;//endl换行的作用,还有刷新缓存区12     //c++里,main函数里的return 0可以省去,系统会自动添加13     return 0;14 }

如果标准库里只需要其中一部分:

using std::cout;using std::cin;using std::endl;using std::string;

程序实际只需要四个标准库。::双冒号叫域操作符,A::B意思是A范围里的B。

定义自己的名字空间

 1 #include<iostream>//不是点h 2 #include<string> 3 using namespace std; 4 namespace dashuai 5 { 6     string name="大帅";    //需要加上头文件 7     int age = 24; 8 } 9 namespace lalala10 {11     char name[20]="啦啦啦";//重名没有问题,因为是不同名字空间里12 }13 14 //使用名字空间下的东西,必须先声明15 using namespace lalala;16 using namespace dashuai;17 int main()18 {19     cout << "我是" << dashuai::name << age << endl;20     cout << "lalala" << lalala::name << endl;21     return 0;22 }

如果不加名字空间,那么会报错,有歧义。

注意:作用范围不同的标识符,原则上是局部优先,范围越小越先考虑。

1        cout << "我是" << dashuai::name << age << endl;2 3        cout << "lalala" << lalala::name << endl;4 5        string name = "aaaa";6 7        cout << name << endl;//这次打印的是aaaa

这里是局部优先的原则!这样编译是没有问题的,因为程序率先在main函数内部找到了name。

 

如果是一个全局变量,也要遵循局部优先原则,还是没有问题的,打印aaaa

如果想打印全局变量则使用::name

 1 string name = "全局变量";// 2 int main() 3 { 4     cout << "我是" << dashuai::name << age << endl; 5     cout << "lalala" << lalala::name << endl; 6     string name = "aaaa"; 7     cout << ::name << endl;//这次打印的是全局变量 8     system("pause"); 9     return 0;10 }

注意:c++把没有放在名字空间里的变量认为放在了匿名名字空间,使用::就可以得到。实际开发的时候不会用那么多名字空间,一个就足够了。

直接使用名字空间的某一局部名

using dashuai::name;using dashuai::age;

类比using std::cout;等语句。

 

c++新增的名字空间namespace