2010-06-18 2 views
6

Есть ли короткий способ для переключения булев?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? 

ответ

25

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

+5

+1: Интересный трюк, никогда не видел этого раньше. :-) –

+4

Интересная идея, но я не рекомендую ее использовать. Каждый другой программист будет тратить 5-10 секунд, понимая, что это значит. – bezmax

+1

@ Макс: Я согласен. Но он спросил, есть ли более короткий путь :) –

0

Не совсем, но в C/C++ существуют операторы для побитовых AND/OR с назначением.

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

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

2

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

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

booleanWithAVeryLongName ^= TRUE; 

Не уверен, что это экономит много и немного боли читать, хотя.

+1

'TRUE', как определено 1, или' true' (как ответил Петар). Или это то же самое? – Default

6

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

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

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

bool booleanWithAVeryLongName = true;  
toggle(booleanWithAVeryLongName); 
+1

+1 Я также хотел бы вернуть новое значение. – 2010-06-18 14:50:55

+2

Я думаю, что возвращение значения может привести к путанице в том, выполняет ли функция свой аргумент или нет. –

+0

Я думаю, что общее решение состоит в том, чтобы предоставить два: 'bool toggle_copy (значение bool) {return! Value; } ' – GManNickG

Смежные вопросы