ですから、これは理論的な問題です。C ++とそれに直接(非)基づいている言語(Java、C#、PHP)には、次のようなほとんどの2項演算子の結果を最初のオペランドに割り当てるためのショートカット演算子があります。
a += 3; // for a = a + 3
a *= 3; // for a = a * 3;
a <<= 3; // for a = a << 3;
しかし、ブール式を切り替えたいときは、いつも次のように書いています
a = !a;
これa
は、長い式のように煩わしくなります。
this.dataSource.trackedObject.currentValue.booleanFlag =
!this.dataSource.trackedObject.currentValue.booleanFlag;
(そうです、デメテルの法則、私は知っています)。
だから私は、思っていた単項ブールトグルオペレータと任意の言語があり、私は省略することができるようになるa = !a
ための表現を繰り返すことなくa
、たとえばは、
!=a;
// or
a!!;
私たちの言語に適切なブール型(bool
C ++のような)があり、それa
がその型(つまりCスタイルではない)であると仮定しましょうint a = TRUE
。
文書化されたソースを見つけることができる場合は、たとえば、C ++の設計者がbool
組み込み型になったときにそのような演算子を追加することを検討したかどうか、またそうであれば、なぜそれを拒否したのかを知りたいと思います。
(注:私は何人かの人々は割り当てが使用するべきではないという意見であることを知っている
=
し、それ++
と+=
便利事業者が、設計上の欠陥ではありません。レッツちょうど私が彼らと満足していると仮定して、彼らはboolsに延長しないだろう理由についてフォーカス)。
this.dataSource.trackedObject.currentValue.booleanFlag ^= 1;
*= -1
が、なんらかの理由でより直感的です^= true
。
void Flip(bool& Flag) { Flag=!Flag; }
長い式を短くします。