Каждый программист должен знать, что:
В некоторых случаях, чтобы оптимизировать программу, может случиться, что компилятор изменяет (!p && !q)
на (!(p || q))
.
Два выражения эквивалентны, и нет никакой разницы в оценке первой или второй.
Но в С++ можно перегрузить операторы, и перегруженный оператор может не всегда уважать это свойство. Таким образом, преобразование кода таким образом фактически изменит код.
Должен ли компилятор использовать законы Де Моргана, когда !
, ||
и &&
перегружены?