这个c++代码片段的问题
Trouble with this C++ snippet
我不明白这段代码是干什么用的,如果有人能解释一下,那就太好了。
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,对吧?
我想我真的不明白为什么这里是|=
而不是=
任何帮助都将是伟大的
谢谢
|=
是位或,不是逻辑或。您已经从代码片段中删除了逻辑,但基本上它所做的是,只要集合中的任何对象都是"接受的",无论accept
的定义是什么,它都会返回true。
x |= y
等同于x = x | y
。所以
result |= accept(...);
如果accept
返回true
,则设置result
为true
——如果accept
返回false
,则保持不变。
与||
相反, |
是位操作,但对于bool值,它给出相同的结果。(并且没有||=
运算符,可能是因为||
具有短路语义。)
我希望这不是所有的代码。在您向我们展示的代码中,result
是未初始化的。
检查函数accept
的返回值是否为真。如果将|=
替换为=
,那么如果最后一次调用accept返回false,那么最终结果也将为false。任何先前的值都将被覆盖。使用|=
可以让您保留之前的结果。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- 我的代码片段有什么问题
- 这个c++代码片段的问题
- 对以下用户定义类片段中的模板实例化问题表示怀疑