Как написать цикл for для значений типа bool (false и true)

Вопрос в основном для развлечения / любопытства: как написать цикл 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.

47
задан Alexey Kukanov 10 January 2012 в 16:00
поделиться