这是我的代码:
#include <iostream>
using namespace std;
class Sales{
public:
Sales(int i = 0):i(i){}
explicit operator int(){ return i; }
private:
int i;
};
int main(){
Sales s(5);
if(s == 4) cout << "s == 4" << endl;
else cout << "s != 4" << endl;
return 0;
}
在 c++ Primer(5th) 中,它说:
编译器将对用作条件的表达式应用显式转换
但是在这种情况下,没有这样的转换。当我删除explicit
时,代码可以正常工作。
但是, 当我更改
explicit operator int(){ return i; }
为
explicit operator bool(){ return i != 0; }
并分别更改if(s == 4)
为if(s)
,然后代码工作正常。
看起来转换规则有点混乱,有人可以更详细地解释一下吗?