C++ / Java: Переключить булев оператор?

Существует ли короткий способ переключить булевскую переменную?

С целыми числами мы можем сделать операции как это:

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

Так есть ли также что-то для булевских переменных (как *= оператор для ints)?

В C++:

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

В Java:

boolean booleanWithAVeryLongName = true;
booleanWithAVeryLongName = !booleanWithAVeryLongName;
// Can it shorter?
booleanWithAVeryLongName !=; // Or something?
6
задан Martijn Courteaux 18 June 2010 в 13:56
поделиться

4 ответа

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

25
ответ дан 8 December 2019 в 02:45
поделиться

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

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

booleanWithAVeryLongName ^= TRUE;

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

2
ответ дан 8 December 2019 в 02:45
поделиться

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

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

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

bool booleanWithAVeryLongName = true;      
toggle(booleanWithAVeryLongName); 
6
ответ дан 8 December 2019 в 02:45
поделиться

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

Что касается логических операций И ​​/ ИЛИ между выражениями - я не думаю, что есть.

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

0
ответ дан 8 December 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: