【发布时间】:2012-01-10 14:48:53
【问题描述】:
一个主要是为了好玩/好奇的问题:如何在 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 次,因此两个布尔值是不够的。 do-while 循环之所以有效,是因为第一次迭代是无条件执行的,条件只检查了两次,因此可以使用 bool 值在继续和退出之间进行选择。
【问题讨论】:
-
令人惊讶的是,错误答案被删除的速度如此之快!
-
是的,你不讨厌他们这样做吗?我觉得这是个好问题。我投了赞成票。
-
因为这个网站不是为了好玩/好奇。真正的问题! PS不,不是我,我也很好奇。
-
为什么投反对票?这是一个合理的问题,也是一个有趣的古董。 +1