函数的默认值、函数重载、inline函数

1、函数的默认值:
    1、函数的默认值一般写在函数的声明中(函数的定义也可以写,但一般可见的是函数的声明,所以给在声明中)

    2、自右向左依次赋值

    3、默认参数不可重定义(只能赋值一次),可以轮流定义(遵循2)

    4、默认值的限制

        1、不能使用局部变量

        2、可以使用全局变量,函数返回值

#include<iostream>
using namespace std;


int gdata = 10;
int Func(int a ,int b,int c = gdata );//函数声明

//函数的定义点
int Func(int a,int b,int c)
{
	return a + b + c;
}

int main()
{
	cout<<Func(10,20);
	gdata = 30;
	cout<<Func(10,20);
	
	Func(10,20,30);

	return 0;
}

2、函数重载

    1、C++函数符号的生成规则:符号和返回值类型、形参类型和形参个数有关

    2、函数重载的三要素:

        1、同作用域

        2、同名

        3、参数列表不同(参数列表相同返回值不同无法识别,系统一样不知道执行哪个函数)

    3、注意事项

         

#include<iostream>
using namespace std;


/*int Max(int a,int b)
{
	return a > b ? a : b;
}

double Max(double a,double b)
{
	return a > b ? a : b;
}*/

int Max(int a,int b)
{
	return a+b;
}//?Max@@YAHHH@Z

int Max(int a,int b,int c = 20)
{
	return a+b+c;
}


double Max(double a,double b);//?Max@@YANNN@Z



int main()
{
	Max(10,20);

	return 0;
}

           这里一切的前提都是不让编译器产生二义性,只要会产生二义性,就会报错。如上这种情况。

 

3、inline函数

      内联函数

              函数名前加inline关键字即为内联函数,在编译时就在本文件调用处展开,(所以会导致如果外部引用,则无效:在链接阶段不会生成函数符号)

           缺点:

                    会导致代码膨胀(当多次调用时,相当于代码重用了多次,占用空间大)

           内联函数的使用建议

                    函数堆栈的开销   >    函数执行的开销        建议写成inline函数。(函数调用是多次堆栈的开销,而程序过大会导致执行的开销大:本处我更愿意理解为程序的存储)

            内联函数的设计位置

                    一般写在头文件下:因为内联函数的定义,导致多个文件调用同一函数用inline不可行,则可用头文件(写函数定义,因为头文件会在每个包含的文件中展开,相当于每个文件中写了一份)。

                    inline函数,static函数

             内联函数的注意事项

                     1、inline给编译器的一个建议:内联在Debug版本下不生效,Release版本下生效,Debug版本下本就添加了大量的调试信息,如果再用inline文件会过于巨大。

                     2、递归,while,switch(因为递归有终止条件在停止,而终止条件只有执行在知道。编译器做的是展开,而不会执行,所以不知道递归次数是多少,无法做到)。

                     3、内联是基于实现的,不是基于声明(声明没有内容可以展开,用了内联也无效)。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值