这个算术表达式意味着什么:C++中的A + = B ++ == 0;

Bat*_*n05 5 c++ arithmetic-expressions post-increment

我来到这个表达式,并且无法理解以下代码段中第3行的含义:

int A=0, B=0;
std::cout << A << B << "\n"; // Prints 0, 0
A += B++ == 0; // how does this exp work exactly? 
std::cout << A << B << "\n";  // Prints 1, 1
Run Code Online (Sandbox Code Playgroud)

A为它添加B,B为Post增加1,"== 0"是什么意思?

编辑:这是实际的代码:

int lengthOfLongestSubstringKDistinct(string s, int k) {
    int ctr[256] = {}, j = -1, distinct = 0, maxlen = 0;
    for (int i=0; i<s.size(); ++i) {
        distinct += ctr[s[i]]++ == 0; // 
        while (distinct > k)
            distinct -= --ctr[s[++j]] == 0;
        maxlen = max(maxlen, i - j);
    }
    return maxlen;
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ken 7

B++ == 0 
Run Code Online (Sandbox Code Playgroud)

这是一个布尔表达式,导致truefalse.在这种情况下,结果是true,true然后添加到A.因此(粗略)等价的值true1:

if(B == 0)
  A += 1;
++B;
Run Code Online (Sandbox Code Playgroud)

请注意,阅读代码并不是特别好或不清楚,写这篇文章的人应该被扔进古拉格斯.

  • @ Batwoman05有些人将一个优秀的程序员定义为能够尽可能少地完成任务的人.有些人生产的垃圾是别人无法理解的; 在一周内包括自己; 即使它有效.其他人定义了一个优秀的程序员,他们可以生成任何其他程序员可以接收和维护的代码.当然,你选择的是个人意见....但如果你选择第一个你错了;) (3认同)
  • 或者更严厉的惩罚:让他们维护代码. (3认同)
  • 也许你应该准确地确定B在比较之后增加,这解释了为什么B ++ == 0是真的 (2认同)
  • 有一个建议对写这个人的惩罚的建议. (2认同)