一、函数重载
1、什么是函数重载?
在同一作用域下,函数名相同,参数列表不同的函数构成重载关系
函数重载与返回值类型、参数名无关
与作用域是否相同,以及参数列表的数量、参数类型、常属性不同等有关
2、C++是如何实现函数重载的?
通过g++ -S 生成汇编代码可知,编译器会把函数的参数类型进行缩写后追加到函数名的末尾形成新的函数名,既是进行了换名操作,从而确保编译结果函数名不重复
3、extern "C"
因为通过C++编译器编译函数、调用语句时,会变成换名后的名字,但是项目中有可能需要去调用已经通过C编译器编译好的函数,它们是没有换名的,因此会调用失败
因为大部分情况下C编译好的文件无法重新使用C++编译器编译,所以只能想办法让C++编译器在调用C编译的函数时不要换名
通过 extern "C"{xxx} 让C++编译器按照C语言的格式编译函数,从而让调用语句与被调用函数名同名,这样就可以正确地调用C标准库、系统函数
4、重载和隐藏
在同一作用域下,函数名相同,参数列表不同的函数构成重载关系
在不同作用域下,同名函数构成了隐藏
5、参数类型不匹配
当调用函数时,编译器会优先调用类型最匹配最精确的版本函数,如果没有最正确的,则会先做类型转换后再匹配,但如果没有能够进行类型转换匹配的版本最后也会报错
但是不建议通过类型转换去调用函数,因为转换情况与编译器有关
二、默认形参
1、什么是默认形参
在C++中可以给函数的参数设置默认值,当函数被调用时如果调用者提供了实参则使用实参调用,如果没有提供则使用默认值调用
2、默认形参要靠右
如果函数有多个参数,并设置了默认形参,要遵循从右往左依次设置默认形参
3、只能在函数声明中设置默认形参
如果函数声明与定义分开实现,只能在函数声明中设置默认形参,否则语法错误
4、默认形参可能会影响函数重载
如果对函数进行了重载,又设置了默认形参,调用时可能会有冲突和歧义,调用失败
因此对于重载过的函数设置默认形参时一定要谨慎
标签:调用,函数,形参,默认,编译器,C++,重载 From: https://www.cnblogs.com/ljf-0804/p/17650124.html