在此C 代码中,它如何从for循环中脱颖而出
How is it breaking out of the for loop in this C++ code?
这是代码:
for (int i=0;i<someClass::someList.entries();i++)
returnBool |= (someOtherClass.get_something() ==
((someClass*)(someClass::someList[i]))->get_something_else());
我认为它的作用是在所有实例中都迭代的,即在Somelist中举行的Someclass的Ptr。如果get_something()== get_something_else(),那么我们将值1分配给returnbool,否则为0作为其位或运算符。
但是,在调试器中,我注意到的是,无论somelist多长时间,它都会在返回bool 1是1时就从for循环中脱颖而出 - 听起来对吗?
感谢您的时间=]
实际上,一旦returnBool
为true
,|=
都不会使其成为false
,因为true | false == true
。
您实际上可以在第一次returnBool
是 true
时安全地从循环中脱离(除非方法get_something
正在突变,否则它的名称不是)。
可能是编译器优化。我认为这些功能足够简单,可以看到它们没有副作用。
如果您确定可以跳过它们,建议使其他不太智能的编译器(或人)更明显,强制性地进行优化:
:for (int i=0;i<someClass::someList.entries() && !returnBool;i++)
returnBool |= (someOtherClass.get_something() ==
((someClass*)(someClass::someList[i]))->get_something_else());
另外,如果编译器是错误的(不太可能),或者您想明确要测试整个列表,请这样做:
for (int i=0;i<someClass::someList.entries();i++)
returnInt += (someOtherClass.get_something() ==
((someClass*)(someClass::someList[i]))->get_something_else());
return returnInt > 0;
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么我的for循环不能正确获取argv
- 在基于范围的for循环中使用结构化绑定声明
- 通过for循环使用用户输入填充列表
- 使用for循环检查数组中的重复项
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 正在使用for循环创建QScatterSerie
- Python中的for循环与C++有何不同
- 在更改for循环的第三部分后,未使用for循环结果
- 在 for 循环中查找问题时遇到困难
- 嵌套for循环C++的问题(初学者)
- 如何用for循环在c++中生成单词三角形
- 如何在for循环中包含两个索引值的测试条件
- 带有多个独立参数的C++For循环
- 为什么我的程序在for循环中k=0时返回垃圾值
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- C++-For循环未执行
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- C++ 无法在字符数组中使用 for 循环打印字母模式