Вопрос в основном для развлечения / любопытства: как написать цикл for
в C ++, который бы повторял два значения 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
и цикл заканчивается.
После некоторого размышления, я считаю, что это невозможно сделать в C ++ 03 без второй переменной илиоснованная на указателе конструкция, подобная предложенной Дитмаром Кюлем.Условие должно быть проверено три раза в желаемом исполнении, поэтому двух значений bool просто недостаточно.И цикл do-while работает, потому что первая итерация выполняется безоговорочно, условие проверяется только дважды, поэтому можно использовать значение bool для выбора между продолжением и выходом.