我为一个类实现了两次转换。一种是布尔,一种是int&。
如果我隐式转换为int,则使用int&转换,但是如果我想要布尔值,则仍使用int&转换。
struct A
{
operator bool() const;
operator int&();
};
// trying to call these:
A a;
int i_test = a; // calls operator int&()
bool b_test = a; // calls operator int&()
我知道a被隐式转换为int&然后转换为bool,但是为什么要花更长的时间呢?如何避免写而不必写a.operator bool()
?
答案 0 :(得分:6)
A a;
声明一个非常量对象。由于转换函数是成员函数,因此它接受指向this
的隐式a
指针。重载解析将选择非const合格成员,因为它是在非const对象上调用的。
实际上是向bool的转换触发了超载解决方案,这有点像是鲱鱼。该函数的返回类型(int&
或bool
)仅使它们成为重载解决方案的候选对象(因为这些将可用于转换为bool
),但不足以确定其结果。超载解析本身。