函数在C ++中调用歧义

时间:2015-07-12 13:54:38

标签: c++ c++11

给出以下功能

void foo(int const &a, long const &b)
{
  std::cout << "B" << std::endl;
}

void foo(int &&a, long &&b)
{
  std::cout << "C" << std::endl;
}

...
// Some where in main(), we called
foo(5.0, 3.5f);

输出将为C,因为r值参考优先于r值。 但是,如果我添加了以下功能。

void foo(int a, char b)
{
  std::cout << "A" << std::endl;
}

整件事情都是模棱两可的。

  • A vs B = Ambiguous
  • A vs C = Ambiguous

希望我能帮助别人解释一下,谢谢。

1 个答案:

答案 0 :(得分:0)

哦,我刚刚意识到,因为所有3个函数的第二个参数必须从float转换为它们各自的参数类型。傻傻的我