代码之家  ›  专栏  ›  技术社区  ›  Batwoman05

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

  •  5
  • Batwoman05  · 技术社区  · 8 年前

    我遇到了这个表达式,无法理解以下代码片段中第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
    

    A加上B,B后加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;
    }
    
    2 回复  |  直到 8 年前
        1
  •  7
  •   Hatted Rooster    8 年前
    B++ == 0 
    

    这是一个布尔表达式,导致 true false .在这种情况下,结果是 符合事实的 ,则, 符合事实的 然后添加到 A .价值 符合事实的 1 因此(粗略)等效值为:

    if(B == 0)
      A += 1;
    ++B;
    

    请注意,这不是特别好或清晰的代码,编写这段代码的人应该被扔进古拉格集中营。

        2
  •  1
  •   Jean-François Fabre    7 年前

    让我们将此表达式拆分为多个部分: A += value 鉴于 value = B++ == 0 .如后所述 cout 建议:, value == 1 .为什么?原因如下: value 是比较的结果 B++ 0 但是 ++ 在操作数之后写入(增量)运算时,将在比较之后进行处理,即如果写入 A += ++B == 0 后者 库特 应该(并且确实)打印 0, 1