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

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

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

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 ответа

Решение

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

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

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

Тогда вы используете это как:

bool booleanWithAVeryLongName = true;      
toggle(booleanWithAVeryLongName); 

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

Я никогда не задумывался об этом, но, думаю, вы всегда можете сделать XOR с TRUE:

booleanWithAVeryLongName ^= TRUE;

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

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

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

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

Другие вопросы по тегам