其实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 lalala 10 { 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;等语句。
时间: 2024-10-05 22:19:13