c ++中的模糊定义

时间:2012-04-17 09:51:38

标签: c++ call ambiguous

我无法找出为什么f的调用是不明确的:/我知道这三个声明都没问题,但在这种情况下这不起作用..

#include <iostream>

using namespace std;
void f(int);
void f(int &);
void f(const int &);

void f(int a);

void f(int &a);

   void f(const int &a);


int main()
{
    int i=1;
    const int ic=2;
    int &ri=i;
    const int & rc=ic;

    f(i);
    f(ic);
    f(ri);
    f(rc);

    return 0;
}

1 个答案:

答案 0 :(得分:1)

  

我知道这三个声明都没问题

如何?所有参数都可以转换为int。模糊性很明显。

您认为int x = rc;无法编译吗?

我认为你的困惑源于void f(int);。由于参数是按值传递,因此可以在新int中复制的任何内容都会匹配此重载。