为什么要使用int而不是bool的转换?

时间:2019-06-13 09:58:16

标签: c++ implicit-conversion overload-resolution

我为一个类实现了两次转换。一种是布尔,一种是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()

1 个答案:

答案 0 :(得分:6)

A a;声明一个非常量对象。由于转换函数是成员函数,因此它接受指向this的隐式a指针。重载解析将选择非const合格成员,因为它是在非const对象上调用的。

实际上是向bool的转换触发了超载解决方案,这有点像是鲱鱼。该函数的返回类型(int&bool)仅使它们成为重载解决方案的候选对象(因为这些将可用于转换为bool),但不足以确定其结果。超载解析本身。