Наткнулся сегодня на вот такой примерно код (почти индус-стайл!):
int x, y; ... if (x) { if (!y || x != y) { /* Do something */ } }
Много думал... Конечно же, if (x && x != y) делает то же самое, но проще.
if (x && x != y)
Это может иметь смысл, если планируется добавить что-нибудь перед последней скобкой.
Да, но тогда надо писать if (x) { if (x != y) { … } … }. Проверка (!y) всё равно лищняя.
if (x) { if (x != y) { … } … }
Иногда такие вещи отражают логику задачи. ("Перед тем, как вскрывать телевизор, выдерни вилку. Перед тем, как лезть в строчник, убедись, что вилка выдернута.")А иногда они отражают причудливый ход мысли того, кто это писал. :-)
Возможно, в будущем предполагалась возможность переопределения типов переменных в какую-нибудь противоречивую аксиоматику