while循环中的条件顺序

Fak*_*ken 6 c++ loops conditional-statements

首先,在我开始之前,我使用的是VC++ 2008专业版,在Windows操作系统上运行Intel core2.我也知道这个代码永远不会在运行Windows的core2/corei7上执行.

我有一个带有2个条件的while循环看起来像这样:注意:这是一个非常简化的版本.

while((a != b) && (array[a] < c))
Run Code Online (Sandbox Code Playgroud)

如果第一个条件(a != b)生成错误,第二个条件是否会被评估?或者循环会在那里终止吗?

我做了一些测试,似乎确实如此.

然而,这是捕获.当第一个条件评估为false时,如果评估第二个条件将生成访问冲突.但是,从我所看到的情况来看,一旦第一个条件被评估为假,程序就不会费心去评估第二个条件并退出循环,从而节省了我.

问题是,我不能完全摆脱访问冲突的问题,而不是让我非常好的和整洁的代码突然爆炸我.但是,由于小"bug"(我知道它是编译器优化,而不是错误),我似乎能够摆脱它.我也知道这可能不是一个好的编程习惯,但说实话,在我的情况下,如果它有效,我已经领先于游戏.

我的问题是,这个"错误"或编程的弊端是否会在某一天回来并咬我?即使考虑到我测试了本节的地狱,并且只会在这一次使用它?

sha*_*oth 23

除非第一个条件已被评估为真,否则不会评估第二个条件.你可以指望这一点.数百万行代码工作,因为这是C和C++如何进行简短的逻辑表达式评估.

你可以使用它并依靠它.如果第一个表达式的计算结果为false,则第二个表达式甚至不会开始计算.

  • 但即使第二个条件可能导致程序崩溃,如果在导致第一个条件返回false的状态下进行评估,这是否可以使用? (3认同)