Что означает это арифметическое выражение: A + = B ++ == 0 в C ++; - PullRequest
0 голосов
/ 04 мая 2018

Я наткнулся на это выражение и не могу понять значение строки 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 - Post, увеличенное на 1, что означает "== 0"?

Edit: Вот фактический код:

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 ]

0 голосов
/ 04 мая 2018

Позволяет разбить это выражение на части: A += value, тогда как value = B++ == 0. Как позже cout предполагает, value == 1. Это почему? Вот почему: value является результатом сравнения B++ и 0, но операция ++ (увеличение), когда записывается после операнда, обрабатывается после сравнения, то есть, если вы пишете A += ++B == 0 позже cout должен (и должен) печатать 0, 1.

0 голосов
/ 04 мая 2018
B++ == 0 

Это логическое выражение, результатом которого является true или false. В этом случае результат true, true затем добавляется к A. Значение true равно 1, поэтому (грубый) эквивалент будет:

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

Обратите внимание, что это не особенно хорошо или понятно для чтения кода, и человек, который написал это, должен быть брошен в ГУЛАГ.

...