これが私のコードです:
#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 ++のプライマー(5番目)では、次のように書かれています:
コンパイラは、条件として使用される式に明示的な変換を適用します
しかし、この場合、そのような変換はありません。を削除するexplicit
と、コードは正常に機能します。
ただし、に変更
explicit operator int(){ return i; }
すると
explicit operator bool(){ return i != 0; }
、
それぞれに変更if(s == 4)
するif(s)
と、コードは正常に機能します。
変換規則は少し混乱しているように見えますが、これについて詳しく説明できる人はいますか?