文章目录
1.命名空间
1.1什么是命名空间
c++中的类和库中有大量的关键字,那么我们定义变量的时候就很容易与这些系统关键字发生冲突,使用命名空间的目的就是为了避免与关键字发生冲突;
举个简单的例子,有人来学校找一个叫张三的人,广播出去后有非常多叫张三,这样就导致了混淆,不知道你要找谁。但是你如果加个前提,我要找4年级3班1组1号的张三,这样就不会发生冲突了;
同样,为了避免这种命名冲突,我们在c++中引入命名空间,在特定的作用域中进行寻找就不会发生冲突了。
1.2命名空间的定义
1.3命名空间的使用
由上述可知命空间的定义,那么我们怎么使用呢?接下来介绍命名空间的3种使用方法
1.命名空间名称以及作用域限定符
2.使用using将命名空间中成员引入
3.使用using namespace 命名空间名称引入
2.缺省参数
2.1什么是缺省参数
缺省参数是指,声明或定义函数的时候为函数的参数指定一个默认值,在调用该函数的时候,如果没有指定实参则采用该默认值,否则使用指定的实参
2.2缺省参数的分类
缺省参数分为全缺省参数和半缺省参数
半缺省参数必须从右往左依次给出,不能间隔给;
缺省参数不能在函数的命名和定义中同时出现,这是因为如果恰好两个位置给的值不一样,那么编译器就无法识别到底是使用哪个缺省值;
缺省值必须是常量或者全局变量
C语言不支持(编译器不支持)
3.函数重载
3.1什么是函数重载
函数重载是函数的一种特殊情况,C++允许在同一作用域内声明几个功能类似的同名函数,但是这些同名函数的形参列表(形参的个数或类型或顺序)必须不同,常用来处理实现功能类似数据类型不同的问题;
3.2为什么C++支持函数重载C语言不支持
在可执行程序运行之前,需要经过预处理,编译,汇编,链接几个阶段;
在预处理阶段进行去注释,宏替换,头文件展开,条件编译等等,在编译阶段编译器将检查代码的规范性和语法,汇编阶段是生成机器可识别的二进制文件,在链接阶段才会用函数名(函数名即函数地址)去寻找对应的函数的实现;
4.extern C
有些时候我们在C++工程之中需要用将某些函数按照C的风格来进行编译,比如我们将C++项目打包成了一个动态库,在后续用C语言去调用这个动态库;
由上面函数重载可知,C++和C的函数编译出来后,C的函数名是没有被修饰的,C++的函数名会进行修饰,那么我们用C就调用不了C++风格编写的函数;
此时只要在函数前面加上extern C告诉编译器,将这个函数按照C语言规则来进行编译就可以解决函数名修饰规则不同的问题了;