C++中表达式A += B++ == 0的含义解析求助
拆解表达式
A += B++ == 0 的运作逻辑 嘿,咱们把这个表达式拆成小块来看,立马就明白啦!
核心:运算符优先级决定运算顺序
在C++里,运算符是有优先级的,这个表达式里的优先级从高到低是:
- 后置自增
++> 相等比较==> 复合赋值+=
咱们按这个顺序一步步拆解你的例子:
初始状态:int A=0, B=0;
先算
B++
后置自增的特点是:先返回变量当前的值,再把变量加1。这里B当前是0,所以B++返回0,然后B的值悄悄变成1。再算
== 0
用第一步得到的返回值0和0做相等比较,0 == 0的结果是布尔值true。在C++里,布尔值会自动转换成整数:true对应1,false对应0。所以这一步的结果是1。最后算
A += 结果
复合赋值+=就是把右边的值加到左边变量上,也就是A = A + 1。初始A是0,加完之后A就变成1了。
这就解释了为什么最后输出1 1啦!
联系你提到的实际代码场景
你补充的lengthOfLongestSubstringKDistinct函数里,应该是类似distinct += ctr[c]++ == 0;这样的表达式吧?这是滑动窗口算法里统计不同字符数量的小技巧:
- 当某个字符
c的计数ctr[c]原本是0时,ctr[c]++返回0,和0比较为true,distinct加1(表示新增了一个不同字符),然后ctr[c]变成1; - 如果
ctr[c]原本不是0,ctr[c]++返回的是大于0的值,和0比较为false,distinct不变,只是把该字符的计数加1。
是不是一下子就通了?
内容的提问来源于stack exchange,提问作者Batwoman05
相关产品推荐
相关产品推荐

