Любая разница, которую он может сделать, это порядок, в котором будут оцениваться аргументы. a != b
обычно оценивает a
, затем оценивает b
и сравнивает их, в то время как b != a
будет делать это наоборот. Однако я где-то слышал, что порядок оценки в некоторых случаях не определен.
Это не имеет большого значения с переменными или числами (если только переменная не является классом с перегруженным оператором !=
), но это может иметь значение, когда вы сравниваете результаты некоторых вызовов функций.
Рассмотрим
int x = 1;
int f() {
x = -1;
return x;
}
int g() {
return x;
}
Предполагая, что операнды вычисляются слева направо, то вызов (f() != g())
даст false
, потому что f()
будет вычисляться в -1
и g()
к -1
- в то время как (g() != f())
даст true
, потому что g()
оценит до 1
и f()
- до -1
.
Это просто пример - лучше избегать написания такого кода в реальной жизни!
To nitpick, это коммутативность, а не ассоциативность. Ассоциативность будет заключаться в том, что '(a! = B)! = C' было таким же, как' a! = (B! = C) '(это вообще не так). –
На самом деле это симметрия. Операции являются коммутативными (иногда), отношения симметричны (иногда). – Beta
@Beta: Спасибо, это слово, о котором я не думал. Конечно, если бы я действительно хотел получить nitpicky, я бы спросил, была ли '! =' Операция или отношение, но давайте не будем туда сейчас. –