c++ - 如何在 boolean 值(假和真)上编写 `for` 循环

标签 c++ for-loop boolean

一个主要是为了好玩/好奇的问题:如何在 C++ 中编写一个 for 循环,该循环将遍历 bool 的两个值(即 truefalse),只使用带有 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) { /*...*/ }

(使用 ab。)

关于c++ - 如何在 boolean 值(假和真)上编写 `for` 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8805161/

相关文章:

c# - 为什么 Boolean.ToString 输出 "True"而不是 "true"

c++ - C 如何处理 char 和?

c++ - 套接字TCP服务器程序问题

c++ - 检查 std::vector 是否有重复项

linux - 如何打印文件名从...到

c++ - 对于字符串中的每个字符

C++ 回溯排列

c++ - 在没有窗口的情况下运行控制台应用程序

java - 使用 for 循环在二维数组中打印 boolean 输入

boolean - 可以按顺序编写所有 boolean 表达式吗?