C++默认参数(default argment)
1)内联函数引入分析
在C语言,对于函数的调用比较频繁,会大大增加栈开销,所以,对于短小的函数频繁调用时,C语言中,使用宏扩展来解决,可以很好的避免栈开销,但是,
缺点就是缺少语法检测性
。C++为了解决这个问题,C++语言新增关键字 inline,用于将一个函数声明为
内联函数
。
在程序编译时
,编译器会将内联函数调用处用函数体替换,从原理上类似于C语言中的宏扩展。采用内联函数可以有效
避免函数调用的开销
,
程序执行效率更高
。使用内联函数的缺点就是,如果被声明为内联函数的函数体非常大,则编译器编译后程序的
可执行码将会变得很大
。另外,如果函数体内
出现循环或者其它复杂的控制结构
的时候,这个时候处理这些复杂控制结构所花费的时间远大于函数调用所花的时间,因此如果将这类函数声明为内联函数,意义不大,反而会使得编译后可执行代码变长。通常在程序设计过程中,我们会将一些
频繁被调用的短小函数声明为内联函数
。
2)内联函数基本使用
#include <iostream>
using namespace std;
inline int Max(int a,int b) //对于普通变量做为函数形参,一般不采用引用
{
return a>b?a:b;
}
inline int Min(int a,int b);
int main()
{
int a = 10,b=5;
//int ret = Max(10,5); //当编译器在编译时,发现Max为内联函数,那么,就会把内联函数体进行嵌入到调用处
int ret = a>b?a:b;
cout << ret << endl;
return 0;
}
//inline关键字必须放在函数的定义,函数声明时,可加可不加
inline int Min(int a,int b)
{
return a<b?a:b;
}
特别提示:inline 关键字应该与函数体放在一起,才会起作用,函数声明时,关键字可加或不加。
默认参数:在函数定义实现时,给形参一个初始化值
语法:
返回值类型 函数名(type 形参变量名 = 默认值)
{
}
应用场景引入:通常情况下,函数在被调用时,形参从实参那里取得值,这一过程中,发生
了值拷贝操作,但是,对于 多次调用一个函数同一个实参时,C++给出了更好解决方案。给形参
一个默认值,就不需要从实参那里拷贝值了。
如果希望给形参一个初始值,这样子,在函数调用时,可以考虑给形参传值也可以使用默认值
演示代码
#include <iostream>
using namespace std;
/*
默认参数
1)如果一个函数有多个参数时,那么,默认参数要从最右开始设置,右边参数不是默认参数,左边的参数不能是默认参数
2)在函数调用时,如果不给默认参数传递新的值,那么,就使用默认值
3)如果函数的声明与实现设计相分离时,默认参数只在函数声明时设置,函数实现时,不需再设置默认值
*/
void print_bed(int width=0,int len = 200);
int main()
{
//儿童床
print_bed(120);
//房间太小,床放不下 120,150
print_bed(120,150); //当函数调用时,给默认参数传递新的参数值,那么,默认参数就使用新的参数值
return 0;
}
//模拟机械厂 加工床
void print_bed(int width,int len )//对于形参而言,可以给它设置一个默认参数,这样在函数调用时,可以不用传实参
{
cout << width = << width << endl;
cout << len = << len << endl;
}
多个默认参数传递实参顺序:
#include <iostream>
using namespace std;
/*
函数的默认参数类型不同情况
1)全部使用默认参数值
2)在函数调用时,从最左边参数开始传递参数
*/
void printS(string name =zhang3,char sex='M',int age=18)
{
cout << name = << name << endl;
cout << sex = << sex << endl;
cout << age = << age << endl;
}
void printT(string name ,char sex='M',int age=18)
{
cout << name = << name << endl;
cout << sex = << sex << endl;
cout << age = << age << endl;
}
int main()
{
printS();//如果将函数参数全部设置为默认参数,那么,在函数调用时,默认参数的传参从最左边开始
printS(wang5,'W');
printS(qian7,'W',20);
return 0;
}
版权声明:本文为Azreax原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。