命名空间概述在C/C++中 , 变量、函数和后面要学到的类都是大量存在的 , 这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突 。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的 。
举个例子:
#include <stdio.h>#include <stdlib.h>int rand = 10;int main(){ printf("%d", rand); return 0;}程序编译的结果显示rand重定义了,为什么会这样呢?因为在stdlib.h这个头文件中已经定义了rand这样一个函数,这样就导致了编译器不知道这是一个函数还是一个变量,C语言中无法应对这种冲突,只能通过改名字来避免 。
![命名空间+缺省参数+const总结+引用总结+内联函数+auto关键字 C++初阶](http://img.zhejianglong.com/231020/01232Mb3-0.png)
文章插图
而C++为了解决这个问题,引入了命名空间的概念 。
命名空间的定义定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员 。
//命名空间//A就是命名空间的名字namespace A{ int a; void func() {}}注意事项:
- 命名空间只能写在全局
- 命名空间可以嵌套命名空间
- 命名空间是开放的,随时可以加入新的成员 , 但是新加入的成员只能在加入后使用
- 匿名命名空间就类似于static
- 命名空间可以取别名
- 分文件编写的时候,如果头文件有两个命名空间,但是里面的成员函数或者成员变量同名的时候,在cpp重实现函数需要加上命名空间
#include<iostream> //引入头文件#include<string>//C++中的字符串using namespace std; //标准命名空间//A就是命名空间的名字namespace A{ //命名空间内既可以定义变量也可以定义函数 int rand = 10; int Sub(int x, int y) {return x + y; } struct ListNode {int data;struct ListNode* next; };}//命名空间的嵌套定义namespace B{ int rand; namespace C {int rand; }}//命名空间是开放的,随时可以加入新成员,但是新成员只能在加入后使用namespace B{ int c;//此时c会合并到命名空间B中 , 实际上就是个合并的过程}//匿名命名空间namespace{ int d = 5;//命名空间没有名字,就类似于static int d = 50 , 是个静态全局变量,别的文件无法使用}int main(){ //命名空间的使用 //1.::作用域限定符 //访问A空间的Sub函数 cout << A::Sub(10, 20) << endl; //2.访问嵌套空间 //访问B空间的C空间的rand变量 B::C::rand = 5; cout << B::C::rand << endl; system("pause"); return EXIT_SUCCESS;}using关键字引入using关键字之后,命名空间的使用又变得不一样
- 用using将命名空间的成员引入
1.使用using声明,就不会每次写A::a了,直接用a就可以
2.using A::a声明的意思就是把变量a又在test函数中定义了一次,此时如果在test内部再定义一个int a;就会出错
- 用using namespace 命名空间名称引入
思考一个问题:下面代码有错吗?
在test01函数体内又定义了一个int a,会报错么?如果不报错,那么输出的是全局的 a = 10 还是局部的a = 20?
namespace A{ int a = 10;}using namespace A;void test01(){ int a = 20; cout<<a<<endl;}答案是不会报错,输出的是局部的20,因为命名空间A内部的变量a在使用using关键字后相当于在全局定义了一个int a ;而在函数体内定义一个局部的 int a;两个变量的作用域不同,是可以定义同名变量的 , 输出的是局部变量的值 , 小伙伴的要注意区分~
C++输入和输出
- C语言用的是printf和scanf进行输入和输出的 。那么C++是用什么来进行输入输出的呢?
推荐阅读
- 手机怎么把QQ空间说说一次性全删掉(qq如何恢复删掉的说说)
- 怎么一次性删掉QQ空间里的全部说说(翻看以前qq空间的说说)
- 怎么把空间说说全部清空(qq空间一键清空所有说说)
- 手机QQ空间怎么一次性删除说说求解(怎么一键删除qq说说)
- qq空间说说怎么全部删除(怎样一键清空qq空间)
- 如何注销空间 1980717Z空间
- qq空间说说怎么全部删除(qq空间说说一键恢复)
- QQ空间说说太多怎么一次性全删除(说说可以一键删除吗)
- 手机QQ空间怎么一次性删除说说求解(一键删除qq说说)
- 用电脑扣扣空间说说怎么批量删除(怎么批量删除自己qq空间说说)