【自我笔记之C++】带默认值参数的函数,inline 函数,函数重载

一、 带默认值参数的函数(没有实参,形参有默认值)

1、形参默认值赋值必须从右向左

2、形参的默认值不能重复赋值

3、一般赋值在声明

Q:普通函数和带默认值参数的函数有什么区别?

A:带默认值参数的函数,调用时可以不传入实参,形参就用了默认值;形参给默认值必须从右向左给;形参的默认值只能给一次,不能给多次。*重点*带有默认值参数的函数在调用时,虽然没有传入实参,但是汇编上还是要生成 push 汇编指令的,把形参默认值进行压栈,所以从汇编上来讲,并没有说你少传入一个实参,就能节省汇编指令,提高效率之说!

 

二、inline 函数(编译阶段,在函数调用点直接代码展开)

注意事项:

1、实现在头文件.h中

2、inline只在release版本

3、只是给编译器的一个建议(是否使用取决于编译器)

由于是在调用点展开代码,所以递归、循环、switch都不适合用

4、基于实现,而不是基于声明(inline放在声明函数中没有意义)

缺点:以代码膨胀为代价,即用空间换取时间

建议:开栈开销 > 执行开销  建议使用inline函数

         开栈开销  < 执行开销  不建议

 

引入】inline和static的区别

1、static有开栈清栈   inline则没有

2、inline是在编译阶段调用点展开

     static函数的属性 local域

引入】inline和宏

1、inline是在编译阶段,在调用点代码展开(编译阶段有词法、语法、语义分析,类型、安全的检查)

    宏是在预编译阶段,宏替换(没有安全检查)

2、inline可以看成是更安全的宏

 

Q:内联函数和普通函数有什么区别

A:内联函数就是给普通函数的定义前面加个 inline 关键字,普通函数调用有调用开销, 内联函数没有;内联是在编译阶段在调用点把函数的代码展开;内联函数必须在调用点之前出现,只能在本文件作用域可见;内联函数在 release 版本才起作用,在 debug 版本中不起作用;内联只 是对编译器的建议,是否真的处理成内联函数,最终由编译器来决定。

内联函数和普通函数最大的区别就是,在编译阶段完成后生成的 obj 文件中,普通函数是要在符号表生成符号的,而内联函数在编译阶段被处理了,在函数的调用点把函数代码展开,因此在符号表中,inline 函数根本就没有符号,因此无法进行链接,因此,内联函数只在本文件中可见,一般都写在头文件当中,被源文件包含使用,内联少了函数调用栈帧的开辟和回退,提高了调用效率。

 

三、函数重载

函数的符号生成规则:

C: 函数名

C++:函数原型(返回值、函数名、函数参数(类型、个数、顺序))

三要素:1.同名        2.不同参         3.同作用域

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值