目录
一、命名空间
1、发展由来
相对于C语言来说,C++引入命名空间的概念是为了解决C语言中自己定义的变量名称和库中原本存在的名称冲突,引入的命名空间。C++用namespace来解决
2、注意事项
①命名空间只影响使用,不会影响生命周期
②命名空间可以嵌套,指定域作用域多个命名空间会合成一个
③访问有两种形式,分别是制定命名空间进行访问(局部展开)和全局展开,这里一般不推荐全局展开,增加代码的健壮性,一般使用局部展开,将常用的进行局部展开,例如:在我们学习C++的过程中,将std进行全局展开,方便进行输入输出的使用。
3、命名空间的几种使用情况
二、输入输出
cout<< "<<"称为流插入符号
cin>> ">>"称为流提取符号
endl 换行操作符
三、缺省参数
1、功能
如果没有进行传参,则默认采用缺省参数;如果进行传参,则采用实参
尤其对于栈的初始化、顺序表的初始化开空间有着至关重要的作用
2、分类
缺省参数分为全缺省和半缺省
3、注意事项
①缺省参数必须是常量或者全局变量
②半缺省参数必须是从左向右进行传,中间不能为空
③缺省参数不能在声明和定义同时出现 推荐在声明时进行出现
四、函数重载
1、函数重载的由来
函数名称可以相同,根据传参数的不同进行调用相对应的函数,与C语言相比较,解决函数名称不能相同的局限
2、函数重载的条件
①函数名相同、
②函数的参数不同,函数的参数不同包括 参数的类型不同、参数的顺序不同、参数的个数不同
- 函数参数类型不同的函数重载
- 参数个数不同的函数重载
- 参数顺序不同的函数重载
3、函数重载的误区
仅仅改变函数的返回值不能称为函数重载
4、函数重载在C++中的实现
C++中的函数重载,C++是如何进行区分的呢
核心:C++会将函数名进行修饰,不同的编译器不同的系统修饰规则不同
在liux下 int add(int x,int y)函数名会被修饰成_zaddii
五、内联函数
1、函数栈帧角度观看内联
call--->jump--->函数体
将原来的函数调用,直接替换成函数体
2、内联的特性
①内联是一种空间换时间的做法
②当函数被当成内联函数时,编译阶段会用函数体替代函数调用
3、优缺点
优点:少了函数调用的阶段,效率高
缺点:文件变大
4、说明
①内联对于编译器来说只是一种建议,不同编译器关于inline底层的实现可能不同
②内联函数不建议声明和定义分离,分离导致链接错误
原因:函数被内联后,函数定义和声明分离后,函数被修饰,找不到函数的地址
5、适用范围
不是递归并且频繁进行调用的小函数
六、引用
1、引用的意义:
引用就是取别名
一定程度简化了指针
2、引用的特性
①引用在定义时必须初始化
②引用的指向不能改变
③引用可以有多个
注:引用初始化引用一个实体后,就不能在引用其他实体,可以用被引用的再去引用其他实体,从而实现引用有多个
3、引用的使用情景
①做函数的参数
一定程度简化了指针
②做函数的返回值
增加函数效率,原因是返回值不用进行临时拷贝
附代码
4、效率比较
- 传值和传引用的效率比较
- 值和引用分别作为函数的返回值效率比较
七、auto简介(C++11)
1、auto用于自动推导类型
主要是以后STL用,简化代码,类型很长时可以考虑自动推导
2、auto的有关限定
- auto不能用于函数的参数
- anto不能用于数组
3、范围for(语法糖)
关于范围for的解释
自动依次将数组中的值赋值给e,自动判断结束
能够利用引用去改变数组中的值
4、注意事项
①auto可以在同一行定义多个变量,变量必须相同类型
②auto不能作为函数的参数使用
③auto不能用于声明数组
八、指针空值(C++11)
为了打NULL的补丁
NULL->0
用函数重载去验证