为什么这个电话含糊不清

Why this call is ambiguous?

本文关键字:含糊不清 电话 为什么      更新时间:2023-10-16

因此,为了了解有关过载解决过程的更多信息,我阅读了这篇文章: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有一个不明确的转换序列,如果具有此参数的函数消除了呼叫将不会含糊不清。这是因为只有一个功能可供选择。

这完全出乎我的意料,所以我想我应该站起来再读一遍,但它仍然躲开了我咧嘴笑

如果有人能解释事件的顺序,以及上面引用的文章中的段落的简单含义,我将不胜感激:)非常感谢:)

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

您永远无法成功地将A传递给void func(B),因为您已经确定了不明确的转换序列。但出于解决过载的目的,过载仍然被认为是可行的。

相反,如果它被从可行集合中删除,那么对func的调用将明确地调用void func(int),因为没有其他选择。这可能不是正确的做法。