为什么这个电话不明确?

时间:2015-12-26 14:59:50

标签: c++ overload-resolution

因此,要了解有关重载解析过程的更多信息,我正在阅读本文:http://accu.org/index.php/journals/268

特殊性"用户定义转换序列的排序"部分有这个例子:

struct A;
struct B {
  B(A const&);
};

struct A {
  operator B() const;
  operator int() const;
};
void func(B);
void func(int);

func(A());

最初,由于结构A

中有以下转换运算符,我认为调用不明确
  operator B() const; //-> A::operator B(const A&) 
  operator int() const; //->  A::operator int(const A&) 

然后他们这样解释:

  

调用不明确,但参数B有歧义   转换序列,如果具有此参数的函数是   淘汰电话不会暧昧。这是因为那里   只会选择一个功能。

这完全是我的头脑,所以我想我应该站起来再读一遍,但它仍然没有找到我 grins

我真的很感激,如果有人可以解释事件的顺序以及上面引用的文章中的段落请用简单的术语表示:)非常感谢:))

1 个答案:

答案 0 :(得分:2)

它试图说明文章前一段中的观点。

由于您已识别的转换序列模糊,您永远无法成功将A传递给void func(B)。但是对于过载解决的目的,过载仍然被认为是可行的。

如果将其从可行集中移除,则对func的调用将明确地调用void func(int),因为没有其他选择。这可能不是正确的事情。