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

Why is the conversion to int used, not to bool?

我为 class 实现了两次转换。一种是bool,一种是int&。

如果我隐式转换为 int,它使用 int& 转换,但如果我想要一个 bool,它仍然使用 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()?

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

触发重载解析的是 bool 的转换这一事实有点转移注意力。函数的 return 类型(int&bool)仅使它们成为重载决议的候选者(因为它们将适用于转换为 bool),但这还不够确定重载决议本身的结果。