这个C ++片段有问题

时间:2011-09-15 04:11:03

标签: c++

我不明白这个片段是做什么的,如果有人能解释它会有很大帮助。

    bool result;
    for (std::set<_Tp>::const_iterator o = objs.begin(); o != objs.end(); o++)
    {
      //confusion here, what does this do
      result |= accept(c, *o, bid); //accept returns a bool
    }

    return result;
  }

我知道|=复合运算符按位运算,但这对结果的值意味着什么?如果accept返回true,那么result的值将保持为true,对吗?

我想我真的不明白为什么|=而不是=

任何帮助都会很棒

由于

3 个答案:

答案 0 :(得分:3)

|=是一个按位或不合逻辑的。你已经从代码片段中删除了逻辑,但是只要集合中的任何对象都被“接受”,无论accept的定义是什么,它基本上都会返回true。

答案 1 :(得分:2)

x |= y相当于x = x | y。那是什么

result |= accept(...);
如果result返回true,则

会将accept设置为true - 如果accept返回false,则不管它。

|相反,

||按位操作,但对于bool值,它会给出相同的结果。 (并且没有||=运算符,可能是因为||具有短路语义。)

我希望这不是所有的代码。在您向我们展示的代码中,result未初始化。

答案 2 :(得分:0)

它检查函数accept中的任何一个返回值是否为真。如果您将|=替换为=,那么如果最后一次调用accept返回false,则最终结果也将为false。之前的任何值都将被覆盖。使用|=可以保留以前的结果。