C++入门学习:内联函数、函数的默认参数和占位参数

内联函数

内联函数: 被内联编译的函数
1.在函数定义的前面加上 inline 关键字,在函数声明前加inline是无效的
2.内联函数 在编译完之后的程序中是不存在的,在编译的过程中,会用内联函数的函数体
去替换到函数被调用的地方。
3.inline 是一种请求,并不会一定成功

设置内联函数的要求
1.函数中不要有任何复杂的循环语句
2.函数中不要有复杂的条件判断
3.函数体不要太长,不要超过5行

4.函数体编译后是不存在的,所以内联函数是没用地址的,不能作为回调函数来使用

推荐用内联函数来代替宏函数

宏函数在预处理期间进行处理,做的是完全替换,可以节省函数的跳转、入栈、出栈等的开销
提升程序运行的效率,用空间换取时间

宏函数的使用可能不会达到预期的效果 宏函数不会对参数类型进行检查


宏函数和内联函数的比较事例

#define ADD(x, y) x+y


inline int add(int a, int b)
{
return a + b;
}

int main()
{
printf("2+3 = %d\n", ADD(2,3)*ADD(2,3));          //2+3*2+3==2+6+3==11,单纯的替换
printf("2+3 = %d\n", add(2,3)*add(2,3));            //(2+3)*(2+3)==5*5==25,将函数体替换了过来

return 0;
}


默认参数

默认参数是函数参数的默认值,当不给这个参数传参的时候使用这个参数的默认值

如果一个函数的某个参数有默认值,则该参数右边的所有参数都要有默认值
/*例void func1(int a, int b = 10, int c);
func1(1,2)
调用函数的时候,参数2不知道该给谁
*/

int add2(int a, int b = 10)
{
return a + b;
}

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

int main()
{
printf("a + b = %d\n", add2(2,3));          // 2+3=5
printf("a + b = %d\n", add2(2));            // 2+10 = 12
printf("a + b + c = %d\n", add1(1,2,3)); // 1+2+3 = 6
printf("a + b + c = %d\n", add1(1,2));    //1+2+20 = 23
printf("a + b + c = %d\n", add1(1));       //1+10+20 = 31
return 0;

}


//占位参数: 形参只有类型没有变量名, 调用的时候必须要给占位参数赋值,虽然不用占位参数

int add3(int a, int)
{
return a;
}

//占位参数可以和默认参数一起使用
int add4(int a, int = 0)
{
return a;
}


int main()
{
printf("a + b = %d\n", add3(1,2));//  1
printf("a + b = %d\n", add4(1));  //  1
return 0;
}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值