c++ 基础

1.命名空间

ps:

1. 在日常练习中,建议直接 using namespace std 即可,这样就很方便。
2. using namespace std 展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型 /
/ 函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模
大,就很容易出现。所以建议在项目开发中使用,像 std::cout 这样使用时指定命名空间 +
using std::cout 展开常用的库对象 / 类型等方式。

2.流的使用 

ps:1.这里的流提取cin和cout指的是console in和console out 

        2.当使用流插入时,函数可以自动识别插入的类型,而不再像c语言那样写不同的%,并且endl自带换行操作

3.缺省参数

缺少参数又分为全缺省和半缺省

全缺省:

ps:这里的参数传入只能从左往右依次传入,不能间隔 

半缺省:

ps:1.如果是半缺省,那么起码要传一个参数,这里的a必须有值

        2.如果要缺省参数则必须从右往左依次缺省不能间隔

* 缺省参数在栈扩容中的运用 

ps:平时在项目中,如果函数的声明和定义都有缺省并不同,则以声明为准 

4.函数重载

函数重载三个不同:个数,类型,顺序

这里的顺序不同必须是不同类型,能够区分的不同,不能是同类型,否则编译器无法识别

ps:返回值不同也不能构成重载,因为编译器调用时无法区分 ,编译器调用时时根据函数名和变量名来形成符号表,再根据符号表查找到函数的具体地址进行调用,所以不同的返回值不能构成函数重载

C++支持函数重载的原理:

C/C++ 中,一个程序要运行起来,需要经历以下几个阶段: 预处理、编译、汇编、链接
每个过程负责不同的东西并生成相应的文件:

在汇编过程中把所有的函数名和对应函数的地址汇总成一张符号表,在链接时按照符号表进行调用,而c语言中,符号表中对应的函数名只有函数名本身,而c++中的符号表除了函数名本身还有变量名首字母等等不同的名字修饰。所以在c语言中,相同函数名之间在符号表中无法区分,因此会发生链接错误调用失败,而c++中拥有更加完善的名字修饰,相互之间可以区分所以c++支持函数重载 

* 函数重载的在cout的运用

 ps:根据右图可以看到,当调用iostream时,分为了istream和ostream,这里我们以ostream举例,下图stream源码中定义了许多重载函数,有int,unsigned int,long等等函数,当使用cout时,会根据传入的参数进行相应的匹配

5.引用

引用的三大特性

引用的运用场景

ps:如果不用引用,则需要用指针,并且函数得传地址,否则形参的改变不会改变实参

作为返回值返回

 ps:这个能正常调用count,因为static存在静态区里面,如果没有static则存储变量在栈内,当count函数调用完成时会进行销毁,如果再使用返回值就会出现越界访问出现随机值,因此程序就无法运行

*  引用在顺序表中的运用

ps:因为顺序表存在堆中,所以当SLAT栈帧销毁时,使用引用作为返回值,当前地址并不会变成随机值,所以只需要定义一个SLAT函数就可以做到既读出指定位置的数据,又能修改指定位置的数据

引用和指针的区别

语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。 底层实现上实际是有空间的,因为引用是按照指针方式来实现的。

我们来看下引用和指针的汇编代码对比:

引用和指针的不同点 :
1. 引用概念上定义一个变量的别名,指针存储一个变量地址。
2. 引用 在定义时 必须初始化 ,指针没有要求
3. 引用 在初始化时引用一个实体后,就 不能再引用其他实体 ,而指针可以在任何时候指向任何
一个同类型实体
4. 没有 NULL 引用 ,但有 NULL 指针
5. sizeof 中含义不同 引用 结果为 引用类型的大小 ,但 指针 始终是 地址空间所占字节个数 (32
位平台下占 4 个字节 )
6. 引用自加即引用的实体增加 1 ,指针自加即指针向后偏移一个类型的大小 . 有多级指针,但是没有多级引用
7. 访问实体方式不同, 指针需要显式解引用,引用编译器自己处理
8. 引用比指针使用起来相对更安全

6.内联函数

内联函数:

宏函数的优缺点

宏函数的错误写法:

 ps:宏函数本质上就是替换,如果要验算整个替换就行,后面加括号是因为涉及到优先级的问题

inline:

ps:举例说明第二点:当内联函数内容过长编译器就会忽略选择不展开,假设一个一百行的func,如果不展开循环1000次,则翻译出来的汇编代码有1000次call和一次func函数内容100行,如果选择展开,则有1000*100行,所以有时候编译器会选择过长不展开,如下图所示

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值