Вопрос в основном для развлечения / любопытства: как написать цикл for
в C ++, который будет перебирать два значения из bool
(т.е. true
и false
), используя только операции с bool
(т.е. без преобразований в другие типы)?
фон состоит в том, что я хотел проверить, сколько решений существует для уравнения типа (A && B) || (! B &&! C &&! D) == true
, и начал писать что-то вроде for (bool A = false; ???; ++ A) for (bool B = false; ...)
и т. д., но тут же застрял на ???
- т.е. что будет условие продолжения цикла? Конечно, я переписал его, чтобы использовать int, и я также знаю t что цикл do ... while
будет работать, но мне стало любопытно, возможно ли когда-нибудь написать такой цикл for
? И поскольку у SO, похоже, нет ответа, я решил спросить:)
Обновление: обратите внимание, что «очевидный» вариант для (bool A = false;! A; A = true)
предложил По крайней мере, в двух теперь удаленных ответах будет выполняться только одна итерация, потому что для второго условие ! A
становится ложным
, и цикл завершается.
После некоторого размышления я считаю, что это невозможно сделать в C ++ 03 без второй переменной или конструкции на основе указателя, как это было предложено Дитмаром Кюлем. Условие должно быть проверено три раза в желаемом исполнении, поэтому двух значений типа bool просто недостаточно. И цикл do-while работает, потому что первая итерация выполняется безоговорочно, условие проверяется только дважды, поэтому для выбора между продолжением и выходом можно использовать значение типа bool.