为什么编译器会抱怨重载函数的模糊性?

时间:2017-12-20 13:53:20

标签: c++ overloading

在以下示例中,所有内容都正确编译,并调用函数“void foo(int&)”。

void foo(const int&) { /* implementation */ };
void foo(int&) { /* implementation */ };

int main(int argc, char** argv)
{
    int i = 0;

    foo(i);
    return (0);
}

我理解第二个函数被调用是因为两个函数都是完全匹配,但只有第一个是身份转换,这就是为什么它比第二个函数更好的匹配,这是一个资格转换。

void foo(const int&) { /* implementation */ };
void foo(int) { /* implementation */ };

int main(int argc, char** argv)
{
    int i = 0;

    foo(i);
    return (0);
}

但是为什么编译器在这个例子中抱怨含糊不清?我认为,编译器应调用“void foo(int)”,因为两个函数仍然是完全匹配,但第一个函数是身份转换,第二个函数也是资格转换。

0 个答案:

没有答案