Так что это скорее теоретический вопрос. C ++ и языки (в), непосредственно основанные на нем (Java, C #, PHP), имеют операторы быстрого доступа для присвоения результата большинства бинарных операторов первому операнду, например
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).
void Flip(bool& Flag) { Flag=!Flag; }
The сокращает ваше длинное выражение.