我在使用const函数和const对象时遇到了函数重载的问题。 有人可以解释为什么“const foo int& int”正在打印而不是“foo int char&”在里面 以下代码?
struct A
{
void foo(int i, char& c) { cout << "foo int char&" << endl;}
void foo(int& i, int j) const { cout << "const foo int& int" << endl;}
};
int main() {
A a;
const A const_a;
int i = 1;
char c = 'a';
a.foo(i,i);
}
谢谢,
答案 0 :(得分:3)
一切都很清楚。您使用两个int类型的参数调用了一个函数。有两个功能候选人。一个具有int类型的第一个参数,另一个具有char的引用参数。因此,要调用此函数,第二个参数应隐式转换为char&amp;类型。但这是一个缩小的转换,因为int的等级高于char的等级。因此,将创建一个临时对象,但临时对象只能与const引用绑定。 第二个函数不需要对其参数进行任何转换。所以它会被调用。
答案 1 :(得分:1)
因为void foo(int& i, int j)
const是更好的匹配,其他函数需要int到char转换。
答案 2 :(得分:1)
第一个函数不能使用int作为第二个参数调用。 char&
无法绑定到int
。这意味着只有第二次重载是另一种选择。
答案 3 :(得分:0)