C++(课程)

C++(课程)

c与c++的区别(第一节课)

区别:

  • 函数默认值参数是在编译(编译是针对单文件编译的)的时候入进去的
  • 默认值参数只能从右向左依次赋值,不能跳过
  • 函数的默认值参数只能赋值一次,不能多次赋值
  • 由于函数的默认值是在编译时期代入得,所以函数的默认值参数只在本文件下生效

内联函数():

  • 无栈帧开辟,直接在调用点编译时期展开(展开的是指令)

  • (DEBUG版本,和正常函数无区别,REALSE版本,调用,函数会在调用点展开)

  • 由于内联函数在编译时期展开,编译时期无法获取变量值,因此递归函数无法被处理成内联函数

  • Inline只是对系统的建议,将该函数处理成内联

符号:

- 
- 所有数据都会生成符号
- 指令中只有函数名会产生符号
- 全局符号:global符号,所有文件只要引用申明就能使用
- 局部符号: Local只有本文件可见
- Inline函数在debug版本生成的是local符号,如果处理成为内联之后在release版本不生成符号,直接在调用点展开

C/C++各函数:

  • 宏函数:
    • 预编译时期在调用点展开
    • 无法调试
    • 没有类型安全校验
    • 单文件可见
    • 不生成符号
  • static函数:
    • 不展开
    • 可以调试
    • 有类型安全校验
    • 有栈帧开辟
    • 单文件可生成local符号
  • 内联函数:
    • debug版本不展开,release版本在调用点展开
    • 可以调试
    • 有类型安全校验
    • debug有栈帧开辟,release无栈帧开辟
    • 单文件可见
    • debug版本生成的是local符号,如果处理成为内联之后在release版本不生成符号
  • 普通函数:
    • 不展开
    • 多文件可见

C和C++相互调用

  • C++调用C---->C++产生函数符号(函数名+参数列表),C语言产生函数符号(依靠函数名)
  • C语言调用C++
    • 如果将C++的函数符号改为C语言的函数符号—需要改动C++源文件(不现实)
    • 添加自己实现的C++文件,写C++文件函数作为中间层去调用需要的C++的函数,然后让自实现的C++函数产生C语言符号,之后使用C语言进行调用

函数重载:

  • c语言生成函数符号依赖函数名
  • c++生成函数符号依赖函数名和参数列表(返回值不影响)
  • 函数重载是在编译时期决定的究竟调用哪个函数-静多态一种

数组名与指针的区别:

数组名->地址->常量

指针->变量

C语言中const只能定义常变量,但此常变量不能作为左值,却可以通过指针改变

常量:1.在编译期将常量的值直接写入到常量的使用点2.常量的初始化必须使用常量

1,为什么常量必须初始化?答:编译时期就将常量的值需要写入 常量的使用点

2,如果使用变量给const修饰的量初始化,则该量会退化成常变量(因为变量的值只能在运行时期才能拿到)

3.注:不能泄露常量的地址给非常量的指针,const修饰的类型是离他最近的第一个成形的类型,其余的是他修饰的内容,Const修饰的内容不能作为左值{

int a;

const int* p2 = &a;

4.如果const修饰的内容不包含指针,则无法参与类型,即函数的调用中无法构成重载

5.引用:引用的底层是指针,在使用到引用的地方,编译时期会自动替换成指针的解引用

引用为什么必须初始化?答:引用一旦初始化之后就无法改变其指向的东西,常引用的初始化必须使用常引用,当引用一个不可以取地址的量的时候,使用常引用会生成临时量,临时量都有常属性

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LredCoat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值