函数的参数
==看下面的代码==
//如果一个位置有了默认参数,那么从这个位置开始,往后的所有位置必须有参数,否则报错
void func(int a,int b=10,int c=20){
cout << a+b+c << endl;
}
int main() {
func(1,2);//23
//这里的2替换掉了参数b的默认参数10
return 0;
}
==注意:函数声明和实现只能有1个写默认参数==
void fun3(int a,int b);//函数声明
int main() {
return 0;
}
//函数实现
void fun3(int a = 10,int b = 20){
//...
}
占位参数
//第2个参数就是占位参数
void func2(int a,int){
//了解一下即可,用途不大
//C语言中没有默认参数和占位参数
}
函数重载
- 同一作用域
- 函数名称相同
- 函数的参数个数不同,或者类型不同,或者顺序不同,函数重载的个数不限
- 返回值不能作为函数重载的条件,返回值必须相同
void func4(){
cout << "no param" << endl;
}
void func4(int a){
cout << "param " << a << endl;
}
int main() {
func4(2);
return 0;
}
- 函数重载碰到了默认参数的时候,需要避免二义性问题
void func(int a,int b=10){}
void func(int a){}
int main() {
func(2);//此时编译器不知道调用的是哪一个函数,编译报错
return 0;
}
- 引用的重载版本
void func6(int &a){
cout << "func1" << endl;
}
void func6(const int &a){
cout << "func2" << endl;
}
int main() {
//int a = 10;//调用的是不加const的版本
func6(10);
return 0;
}
函数重载的实现原理
==C++发生函数重载,编译器会将函数名进行修改,比如void func(int a);会被修改成_func_int,这样编译器就会区分出来,void func(int a);在linux环境下会被编译成_24funci