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