关于cpp中的增量操作

时间:2014-07-30 14:03:55

标签: c++

是否遵循等效的代码示例?

此:

while (true)
    if (!a[counter] || !b[counter++]) break;

和此:

while (true){
    if (!a[counter] || !b[counter]) break;
    counter++;
}

我的意思是,在所有条件之后都会增加。检查完成了吗?


下面:

int _strCmp(char* s1,char*s2)
{
    int counter = 0;

    while (s1[counter]==s2[counter])
        if (!s1[counter] || !s2[counter++]) return 0;

    if (s1[counter] > s2[counter])
        return 1;
    if (s1[counter] < s2[counter])
        return-1;

    return 0;
}

在某些情况下,当此功能无法正常工作时?

3 个答案:

答案 0 :(得分:4)

不,他们不是。
如果!a [counter]返回true,则不会评估OR条件 仅在第一个条件为假时才评估OR中的第二个条件。这是因为任何与真实相关的东西都是真的。

请看下面的图片: enter image description here

如图所示,您可以看到案例2不等同

答案 1 :(得分:0)

由于它在评估后递增(而不是++counter),因此返回的值是递增之前的值。所以,那些是等同的陈述。

如果counter = 6,则!b[counter++]将返回b[6],然后将6增加到7

答案 2 :(得分:0)

您可以自己尝试将代码更改为:

run = 5;

while (run > 0) {
 run--;
 if (!a[counterA] || !b[counterA++]) break;
}

run = 5;

while (run > 0){
 run--;
 if (!a[counterB] || !b[counterB]) break;
 counter++;
}

// compare counterA and counterB

编辑:

关于&#34;我的意思是,在所有条件之后都会增加&#39;检查完成了吗?&#34;

没有。有post和preincrement操作。由于您正在进行后期增量,因此在使用其值来评估表达式后,您的值将会增加。