这个算术表达式是什么意思:C++中的A += B++ == 0;
What does this arithmetic expression mean: A += B++ == 0 in C++;
我遇到了这个表达式,无法理解以下代码段中第 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,BPost加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;
}
B++ == 0
这是一个布尔表达式,结果为 true
或 false
。在这种情况下,结果是 true
,然后将 true
添加到 A
。 true
的值是 1
所以(粗略的)等价物是:
if(B == 0)
A += 1;
++B;
请注意,代码阅读起来不是特别好或清晰,编写此代码的人应该被扔进古拉格集中营。
让我们把这个表达式分成几个部分:A += value
,而 value = B++ == 0
。正如后来 cout
所暗示的那样,value == 1
。这是为什么?原因如下:value
是B++
和0
比较的结果,但是++
(自增)操作写在操作数之后,是在比较之后处理的,即如果你写 A += ++B == 0
后面的 cout
应该(并且确实)打印 0, 1
.
我遇到了这个表达式,无法理解以下代码段中第 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,BPost加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;
}
B++ == 0
这是一个布尔表达式,结果为 true
或 false
。在这种情况下,结果是 true
,然后将 true
添加到 A
。 true
的值是 1
所以(粗略的)等价物是:
if(B == 0)
A += 1;
++B;
请注意,代码阅读起来不是特别好或清晰,编写此代码的人应该被扔进古拉格集中营。
让我们把这个表达式分成几个部分:A += value
,而 value = B++ == 0
。正如后来 cout
所暗示的那样,value == 1
。这是为什么?原因如下:value
是B++
和0
比较的结果,但是++
(自增)操作写在操作数之后,是在比较之后处理的,即如果你写 A += ++B == 0
后面的 cout
应该(并且确实)打印 0, 1
.