函数重载
函数名相同,函数的参数列表(函数个数 或 类型 或 顺序)必须不同,常用于处理数据类型不同的问题。
注:C语言中没有函数重载,会是函数重定义的错误。
//函数重载 int Add(int left, int right) { return left + right; } double Add(double left, double right) //类型不同 { return left + right; } int Add(double a,int b,float c) //个数不同 { return a+b+c; } int Add(int a,float b,double c) //顺序不同 { return a+b+c; }
函数重载和函数返回值无关。一下不是函数重载!!!
//不是函数重载!!!! short Add(short left, short right) { return left+right; } int Add(short left, short right) { return left+right; }
问:为什么C中没有函数重载,C++中有函数重载?
C语言的名字修饰规则非常简单,只是在函数名字前面添加了下划线(_函数名)。因此当工程中存在相同函数名的函数时,就会产生冲突,发生重定义的错误。C++要支持函数重载,命名空间等,使得其修饰规则比较复杂(前缀+函数名+参数),不同编译器在底层的实现方式可能都有差异。
问:C++支持重载的原因?
因为C++中函数名的修饰规则更复杂。有名字修饰(name Mangling)。
问:C++中能否将一个函数按照C的风格来编译
用extern "C"
extern "C":告诉编译器,将 该函数按照C语言规则来编译。即:在函数面前加上就好了
extern "C" { int Add(int left, int right); } //这样也可以,这样大括号中间就可以有好多的代码,都是按C规则来编译 int main() { Add(1,2); return 0; }
一般不常用。