为什么这个电话含糊不清
Why this call is ambiguous?
因此,为了了解有关过载解决过程的更多信息,我阅读了这篇文章: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)
,因为没有其他选择。这可能不是正确的做法。
相关文章:
- Boost::asio::streambuf consumption() 不清空缓冲区
- 电话拨号程序将字母转换为卡片花色而不是数字
- C++ 2D 阵列...迷失在原型和电话上,在任何地方都看不到这个
- 为什么编译器在此代码中说POW(N,K)含糊不清
- 为什么我不能以这种方式清空文件?
- 如何清空列表而不破坏其元素
- 我搞不清我的代码出了什么问题
- “距离”的提法含糊不清
- int &a = b 使 'a' 成为 C 4.8.1 中指向 'b' 的指针,但在 C 中不是,为什么?(参考电话)
- 我是不是太快了,数不清妖孽
- 字符串流缓冲区在 Objective-C++ 中不会清空
- 对'list'的引用含糊不清
- 为什么这个电话含糊不清
- 清空std::矢量而不更改其大小
- 是否可以在不调用包含对象的析构函数的情况下清空映射的内容?
- 在C++中清除数组会在外部函数中而不是在main()中产生编译器错误
- §9.5/8 中可能含糊不清的陈述
- 口齿不清的类
- 对"class"的提及含糊不清
- 在用户定义的类中清空 std::vector 时不释放内存