【问题标题】:What does this arithmetic expression mean: A += B++ == 0 in C++;这个算术表达式是什么意思:A += B++ == C++ 中的 0;
【发布时间】:2018-10-14 23:00:25
【问题描述】:

遇到了这个表达式,看不懂下面sn-p中第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”是什么意思?

编辑: 这是实际的代码:

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;
}

【问题讨论】:

  • 意味着您的 CS 老师以错误的方式教您错误的东西。用这些C++ books 补充您的正规教育。
  • 这意味着将最后一个值 - B++ 结果 - 与 0 进行比较,并返回一个布尔值 true / false。但这是相当愚蠢的代码。
  • 这段代码如果你是在工作场合写的,你应该立即被解雇。
  • &lt;&lt; &lt;&lt; 看起来不像是有效的 C++。你的意思是&lt;&lt; " " &lt;&lt;
  • @Lundin bool 将被提升为 int;以同样的方式 int 将被提升为 long 等。

标签: c++ arithmetic-expressions post-increment


【解决方案1】:
B++ == 0 

这是一个布尔表达式,结果为truefalse。在这种情况下,结果是true,然后将true 添加到Atrue 的值是 1,所以(粗略的)等价物是:

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

请注意,这对阅读代码不是特别好或不清楚,编写此代码的人应该被扔进古拉格。

【讨论】:

  • 也许你应该精确说明 B 在比较之后会增加,这就解释了为什么 B++ == 0 是真的
  • @souki 添加了一个粗略的等价物以便于理解。
  • 赞成对写这篇文章的人进行惩罚。
  • @Batwoman05 有些人将优秀的程序员定义为能够用尽可能少的代码完成某事的人。有些人制造的垃圾是别人无法理解的;包括他们自己一个星期;即使它有效。其他人定义了一个优秀的程序员,他可以编写任何其他程序员都可以学习和维护的代码。当然,您选择的是个人意见....但是如果您选择第一个,那您就错了;)
  • 或者更残酷的惩罚:让他们维护代码。
【解决方案2】:

让我们把这个表达式分成几部分:A += value,而value = B++ == 0。正如稍后cout 建议的那样,value == 1。这是为什么?原因如下:valueB++0比较的结果,但是++(增量)运算,当写在操作数之后,是在比较之后处理的,即如果你写A += ++B == 0是后者cout 应该(并且确实)打印 0, 1

【讨论】:

    猜你喜欢
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-01
    • 2020-11-30
    • 1970-01-01
    • 2014-04-06
    • 2021-09-16
    相关资源
    最近更新 更多