首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。