一个主要是为了好玩/好奇的问题:如何在 C++ 中编写一个 for
循环,该循环将遍历 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
并且循环结束。
经过一番思考,我相信如果没有第二个变量或 Dietmar Kühl 建议的基于指针的构造,在 C++03 中是不可能做到的。该条件应在所需的执行中测试 3 次,因此两个 boolean 值是不够的。 do-while 循环之所以有效,是因为第一次迭代是无条件执行的,条件只检查了两次,因此可以使用 bool 值在继续和退出之间进行选择。
最佳答案
在 C++11 中:for (bool b : { false, true }) {/* ... */}
这是一个 C++03 版本:
for (bool a = true, b = false; b != a; a = a && b, b = !b) { /*...*/ }
(使用 a
或 b
。)
关于c++ - 如何在 boolean 值(假和真)上编写 `for` 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8805161/