C++ 为什么要转换成int,而不是bool?

C++ 为什么要转换成int,而不是bool?,c++,implicit-conversion,overload-resolution,C++,Implicit Conversion,Overload Resolution,我为一个类实现了两个转换。一个是bool,一个是int& 如果我隐式地转换为int,它使用int&转换,但是如果我想要bool,它仍然使用int&转换 结构A { 运算符bool()常量; 运算符int&(); }; //试着称之为: A A; int i_测试=a;//调用运算符int&() 布尔b_检验=a;//调用运算符int&() 我知道a隐式地转换为int&然后再转换为bool,但为什么它需要更长的路径呢?我如何避免它而不必编写a.operator bool()?a声明一个非常量对象

我为一个类实现了两个转换。一个是bool,一个是int&

如果我隐式地转换为int,它使用int&转换,但是如果我想要bool,它仍然使用int&转换

结构A { 运算符bool()常量; 运算符int&(); }; //试着称之为: A A; int i_测试=a;//调用运算符int&() 布尔b_检验=a;//调用运算符int&()
我知道a隐式地转换为int&然后再转换为bool,但为什么它需要更长的路径呢?我如何避免它而不必编写
a.operator bool()

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


事实上,正是转换为bool触发了重载解析,这有点像是在转移注意力。函数的返回类型(
int&
bool
)仅使它们成为重载解析的候选对象(因为它们将用于转换为
bool
),但它不足以确定重载解析本身的结果。

a
不是
const
。因此,没有一个操作符完全匹配。这可能是首选
int&A::operator()
的原因。顺便说一句,当
const
方法是
public
和相应的非
const
方法
private
时,它甚至会这样做。这曾经让我头疼,我记得在SO中也发现了相关的Q/a。@Scheff-是的,在一个可访问性可能会影响重载解析的世界中,我们可能都会更快乐(或者有其他问题需要处理)。我让它通过删除常量限定符来选择布尔转换的实现。现在我想知道如何做
operator bool(){return operator bool()const;}
这样的事情,使常量a和非常量a的转换使用相同的函数。@DanielBauer-共享实现的一种方法是将
this
强制转换为常量对象。
返回std::as_const(*this)或<代码>返回常量转换(*此)。它现在按我的预期工作。我当时正在考虑这个解决方案,但不太确定人们是否会这样做。