C++中的函数重载问题

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;
}

就会出现二义性:

img


但是,如果代码写成:

#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,这是因为,引用的传递必须是左值,就不会产生二义性。