在以下示例中,所有内容都正确编译,并调用函数“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)”,因为两个函数仍然是完全匹配,但第一个函数是身份转换,第二个函数也是资格转换。