Dee*_*epu 15 c operator-precedence short-circuiting
我在Windows 7上的Code :: Blocks 10.05中执行了以下代码.
int a=0,b=0,c;
c=a++&&b++;
printf("\na=%d\nb=%d\nc=%d\n\n",a,b,c);
Run Code Online (Sandbox Code Playgroud)
我获得的输出如下,
a=1
b=0
c=0
Run Code Online (Sandbox Code Playgroud)
由于短路评估,这非常有意义.
表达式a++
是后递增的,0
并返回到逻辑和(&&
).因此,部分b++
不评估,因为两个0 && 0
和
0 && 1
的计算结果为0
.
但这引起了我的怀疑.运营商的优先价值清楚地表明,++
优先级高于&&
.所以我的理解是这样的,a++
并且b ++都被评估,然后&&
只检查表达式的结果a++
来做出决定.但这并没有发生,只是a++
在这里评估.
这种行为的原因是什么?是否&&
是一个顺序点事做这种行为?如果是这样,为什么我们说&&
优先级低于++
?
Yu *_*Hao 34
您对评估的优先顺序和顺序感到困惑.
优先级定义了运算符的分组方式,即
c = a++ && b++;
Run Code Online (Sandbox Code Playgroud)
相当于:
c = ((a++) && (b++));
Run Code Online (Sandbox Code Playgroud)
评估顺序定义了如何评估表达式,首先评估&&
平均值的短路a++
,如果它是零,则结束; 如果它不为零,b++
则进行评估.
另一个例子:
c = (a++) + (b++);
Run Code Online (Sandbox Code Playgroud)
是a++
之前评估b++
?答案是我们不知道.大多数运营商没有定义评估顺序.&&
是少数几个定义的运营商之一.(其余的是||
,,
和?:
)
归档时间: |
|
查看次数: |
1206 次 |
最近记录: |