函数默认值、内联函数、函数重载

函数默认值

C++在声明函数原型的时候,可以为一个或多个参数指定默认参数值,当函数调用的时候,如果没有指定这个值,编译器会自动用默认值替代。
列如:

   int  Sum(int a=1 ,int b =10)
      {
      		return a+b;
      }
   int main
   {
       sum(1,2);//正常调用函数
       sum(1);//只传了一个参数,但由于声明了默认值,编译器会自动替换成默认参数
       sum();//直接使用默认值替换
   }

函数默认值的特点

  1. 自右向左,依次设计

  2. 默认值不能重复赋值(即如果函数声明和函数定义分开,函数声明设置了默认参数,函数定义不能再设置默认参数。)

  3. 一般把默认值赋在声明上

零初始化
int Sum (double a =double(),int b =int (),char c =char();
代表对应类型的0;

内联函数

在计算机科学中,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展);也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方(上下文),从而节省了每次调用函数带来的额外时间开支。但在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡,因为过多的比较复杂的函数进行内联扩展将带来很大的存储资源开支。另外还需要特别注意的是对递归函数的内联扩展可能引起部分编译器的无穷编译。

C++中用 inline修饰的函数称之为内联函数
内联函数的特点:在函数调用点之间展开
好处:无函数开栈淸栈开销,速度快
缺点:以代码膨胀为代价,空间换取时间
inline函数只是给编译器的一个建议:如果函数执行的开销小于函数开栈的开销使用内联函数。
内联在debug版本不生效,只在release 生效
递归函数一定不会成为内联函数,编译器会将其按普通函数处理
inline函数与普通函数的区别
内联只是在函数前加inline,在之就是内部实现上,内联直接在调用点展开(和宏有些相似)而普通函数被调用时,系统首先跳跃到该函数的入口地址,执行函数体,执行完成后,再返回到函数调用的地方,函数始终只有一个拷贝。
inline函数与宏的区别
inline函数编译期间处理 有类型检查和安全检查 ,可以调试
宏在预编译期间处理,无类型检查和安全检查 , 不可调试
inline函数与static修饰的函数的区别

  1. 从作用域来看,两者都是只有本文件可见
  2. static函数修饰变量和函数,而inline只修饰函数
  3. static修饰的函数在符号表中产生的符号是local的,inline修饰的直接在调用点展开,不产生符号
    内联函数的注意事项
  4. 一般实现在.h文件中
  5. 内联在debug版本不生效,只在release 生效
  6. 只是给编译器的一个建议。递归、循环、switch 均不能成为内联函数
  7. 内联要基于实现,不是基于声明的。

函数重载

C++ 不允许变量重名,但是允许多个函数取相同的名字,只要参数表不同即可,这叫作函数的重载。重载就是装载多种东西的意思,即同一个事物能完成不同功能。使用函数重载可以让程序员对完成相似功能不同函数,起相同函数名。
列如

int fun(int a,int b )//原函数
{
      return a+b;
}
double fun(double a,double b)//返回值参数类型不同,可以重载
{
	return a+b;
}
double fun(int a,int b)//只有返回值不同,不能重载
{
	return a+b;
}

下面查看vs中符号表,正因为符生成的符号不同,所以才可以使用重载在这里插入图片描述
重载的依据

  1. 函数名相同,形参类型不同
  2. 不能除返回值不同外,其余参数类型相同

函数重载的三要素

  • 同名作用域
  • 同名
  • 参数不同
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值