学习的是课程https://www.bilibili.com/video/BV1Lo4y1o717
要点
C++允许函数设置成默认参数,在调用时可以根据情况省略实参
正确示范
#include <iostream>
using namespace std;
int sum(int a = 5, int b = 7) {
return a + b;
}
int main()
{
cout << sum() << endl;
cout << sum(10, 10) << endl;
cout << sum(100) << endl;
return 0;
}
运行结果
#include <iostream>
using namespace std;
int sum(int a, int b = 7,int c = 8) {
return a + b + c;
}
int main()
{
//cout << sum() << endl;
cout << sum(10, 10) << endl;
cout << sum(100) << endl;
return 0;
}
运行结果
默认参数只能按照从右到左的顺序
也就是如下情形都是错误的
如果函数同时有声明和实现,默认参数只能放在函数声明中
正确写法:
#include <iostream>
using namespace std;
int sum(int a, int b = 7, int c = 8);
int sum(int a, int b, int c) {
return a + b + c;
}
int main()
{
//cout << sum() << endl;
cout << sum(10, 10) << endl;
cout << sum(100) << endl;
return 0;
}
默认参数的值可以是常量、全局符号(全局变量、函数名)
#include <iostream>
using namespace std;
int age = 12;
void test() {
cout << "test()" << endl;
}
void func2(int a = 5,int b = 7, int c = age, void (*func)() = test) {
//*func是一个函数指针
cout << "a is"<< a << endl;
cout << "b is" << b << endl;
cout << "c is" << c << endl;
func();
}
int main()
{
func2();
return 0;
}
运行结果为:
函数重载和默认参数可能导致二义性
去掉默认参数就无bug了
反汇编
#include <iostream>
using namespace std;
int func1(int a,int b = 4) {
return a + b;
}
int main()
{
func1(10);
func1(10, 4);
/*cout << func1(10) << endl;
cout << func1(10, 4) << endl;*/
return 0;
}
可以看出,在默认参数情况下,其汇编代码是一样的
机器码略微不同,需要查看intel的机器码白皮书