int func(int,int)和int func(int&, int&)可以重载吗
这是不可以的。函数重载,两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数。C++允许功能相近的函数在相同的作用域内以相同函数名定义,从而形成重载。
比如
#include<iostream>
using namespace std;
void func(int& a, int& b) {
cout << "func(int &a, int &b)" << endl;
cout << a + b << endl;
}
void func(int a, int b) {
cout << "func(int a, int b)" << endl;
cout << a + b << endl;
}
int main() {
int a = 10, b = 10;
func(a, b);
return 0;
}
就会出现二义性:
#include<iostream>
using namespace std;
void func(int& a, int& b) {
cout << "func(int &a, int &b)" << endl;
cout << a + b << endl;
}
void func(int a, int b) {
cout << "func(int a, int b)" << endl;
cout << a + b << endl;
}
int main() {
func(10, 10);
return 0;
}
这样能输出正确结果,且调用的是函数int func(int,int,这是因为,引用的传递必须是左值,就不会产生二义性。