函数的参数

==看下面的代码==

//如果一个位置有了默认参数,那么从这个位置开始,往后的所有位置必须有参数,否则报错
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语言中没有默认参数和占位参数
}

函数重载

  1. 同一作用域
  2. 函数名称相同
  3. 函数的参数个数不同,或者类型不同,或者顺序不同,函数重载的个数不限
  4. 返回值不能作为函数重载的条件,返回值必须相同
void func4(){
    cout << "no param" << endl;
}

void func4(int a){
    cout << "param " << a << endl;
}


int main() {
    func4(2);
    return 0;
}
  1. 函数重载碰到了默认参数的时候,需要避免二义性问题
void func(int a,int b=10){}

void func(int a){}

int main() {
    func(2);//此时编译器不知道调用的是哪一个函数,编译报错
    return 0;
}
  1. 引用的重载版本
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