为了提高使用有序数组的 clique-partitioning 程序的性能,我在for
循环的停止条件中包含了对要循环到的数组元素的访问。
int myValue = 13;
for (int i=0; array[i] < myValue; i++)
{
//performing operations on the array
}
这显然是不安全的,因为我的数组可能只包含小于的值myValue
,所以我尝试了这个
int myValue = 13;
for (int i=0; i < array.size() && array[i] < myValue; i++)
{
//performing operations on the array
}
在这个实现中,一切似乎都很顺利,但是如果我切换条件,我就会陷入与第一个示例相同的问题。
int myValue = 13;
for (int i=0; array[i] < myValue && i < array.size(); i++)
{
//performing operations on the array
}
所以,我推断这显然是由于编译器设置两个条件的顺序的方式,因为在最后一种情况下,即使我要求只有在i
不大于数组大小的情况下才进入循环,我' m 之前读取的值可能超出数组的范围。
我的问题是:像我在第二个实现中所做的那样总是安全的,还是编译器有时会切换我的控制条件导致不安全的代码?
谢谢。