C++语法中的函数重载和默认参数语法中的函数重载和默认参数
C语言中没有函数重载
C++语言中有函数重载
函数名相同,参数个数不同、参数类型不同、参数顺序不同函数名相同,参数个数不同、参数类型不同、参数顺序不同
例如下面就是函数重载
void sum(int a, int b){
cout << a+b << endl;
}
void sum(int a, double b){
cout << a+b << endl;
}
返回值类型与函数重载无关返回值类型与函数重载无关
返回值类型与函数重载无关,下面代码不构成重载,编译会报错
//返回值类型与函数重载无关
int func(){
return 0;
}
double func(){
return 0;
}
实参的隐式类型转换可能会产生二义性实参的隐式类型转换可能会产生二义性
不同编译器有不同处理
下面代码在vs上编译不过,但是在Xcode中可以编译通过。
#include "iostream"
using namespace std;
void sum(double a){
cout << a << endl;
}
void sum(int a){
cout << a << endl;
}
int main(){
sum(10);
return 0;
}
函数重载的本质函数重载的本质
采用了name mangling或者叫name decoration技术
C++编译器默认会对符号名(比如函数名)进行改编、修饰,有些地方翻译为“命名倾轧”
重载时会生成多个不同的函数名,不同编译器(MSVC、g++)有不同的生成规则
通过IDA打开【VS_Release_禁止优化】可以看到 或者通过hopper查看
源码源码
下面的代码
#include "iostream"
using namespace std;
void sum(double a){
cout << a << endl;
- 1
- 2
前往页