A
とB
の2つのクラスがあり、それぞれがoperator bool()
を定義しています。if(a!= b)
私は最近によって引き起こされたバグに出くわした:GCC 4.9.1の下で罰金コンパイル
A a;
B b;
if(a!=b)
{
//...
}
コードと暗黙的に比較の前にBOOLするaとbを変換します。
これを防止し、コンパイルエラーを引き起こし、プログラマがAとBによって提供される明示的な変換関数を使用するようにすることは可能ですか? AとBの宣言は無関係でなければなりません。異なるヘッダーにあります。
あなたは '演算子をオーバーロードすることができれば何が起こるか見ることができます例です。
別のオプションは、暗黙のint型の変換を削除することです!=(A、B) '、またはあなたのブール変換を'明示的に 'にする。 –
' bool' 'explicit'への変換を行いますか?これは通常適切なことであり、 'if(a)'は文脈上 'bool' *に変換される*と考えられます。 – BoBTFish
あなたが「変換」と言うとき、あなたは「比較」を意味しますか? –