C ++ / Java: переключить логическое выражение? - PullRequest
6 голосов
/ 18 июня 2010

Есть ли короткий способ переключить логическое значение?

С целыми числами мы можем выполнять такие операции:

int i = 4;
i *= 4; // equals 16
/* Which is equivalent to */
i = i * 4;

Так есть ли что-то для логических значений (например, оператор *= для целых чисел)?

В C ++:

bool booleanWithAVeryLongName = true;
booleanWithAVeryLongName = !booleanWithAVeryLongName;
// Can it shorter?
booleanWithAVeryLongName !=; // Or something?

В Java:

boolean booleanWithAVeryLongName = true;
booleanWithAVeryLongName = !booleanWithAVeryLongName;
// Can it shorter?
booleanWithAVeryLongName !=; // Or something?

Ответы [ 4 ]

25 голосов
/ 18 июня 2010

Нет такого оператора, но это немного короче: booleanWithAVeryLongName ^= true;

6 голосов
/ 18 июня 2010

Как насчет простой функции (в C ++):

void toggle (bool& value) {value = !value;}

Затем вы используете ее как:

bool booleanWithAVeryLongName = true;      
toggle(booleanWithAVeryLongName); 
2 голосов
/ 18 июня 2010

Я думаю, что лучшей аналогией было бы то, что вы ищете логический эквивалент унарного operator ++, которого, я уверен, не существует.

Я никогда не думал об этом,но я думаю, вы всегда можете сделать XOR с ИСТИНОЙ:

booleanWithAVeryLongName ^= TRUE;

Не уверен, что это сильно экономит и немного трудновато читать.

0 голосов
/ 18 июня 2010

Не совсем так, но в C / C ++ есть операторы для побитовых AND / OR с присваиванием.

Для логических ANDS / OR между выражениями - я не думаю, что это так.

Тем не менее, в C вы на самом деле не имеете тип bool, просто int, поэтому вы можете использовать целочисленные операторы для выполнения таких сочетаний клавиш.

...