首先,在开始之前,我使用VC++ 2008专业版,在Windows操作系统上运行Intel Core2。我知道这段代码永远不会在除Core2/Corei7以外的任何设备上执行。
我有一个带有两个条件的while循环,大致如下:
注意:这是一个简化版本。while((a != b) && (array[a] < c))
如果第一个条件
(a != b)
生成 false,第二个条件会被评估吗?还是循环会在那里终止?我进行了几次测试,似乎确实如此。
然而,问题在于:如果第一个条件评估为 false,第二个条件将生成访问冲突。但是,从我所看到的情况来看,一旦第一个条件被评估为 false,程序就不再费力去评估第二个条件并退出循环,从而拯救了我。
问题在于,我无法摆脱访问违规问题,否则我的代码将变得非常糟糕。但是,由于这个小“漏洞”(我知道这是编译器优化,而不是漏洞),我似乎能够逃避它。我也知道这可能不是好的编程实践,但老实说,在我的情况下,如果它起作用,我已经赢得了游戏。
我的问题是,这个“漏洞”或编程不当的行为有没有可能在某一天反咬我一口?即使考虑到我对此部分进行了彻底的测试,并且只会使用它一次?