您的位置:首页 > 编程语言 > C语言/C++

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

2018-03-13 20:19 489 查看

内联函数

内联函数: 被内联编译的函数
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: