在此C 代码中,它如何从for循环中脱颖而出

How is it breaking out of the for loop in this C++ code?

本文关键字:for 循环 脱颖而出 代码 在此      更新时间:2023-10-16

这是代码:

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循环中脱颖而出 - 听起来对吗?

感谢您的时间=]

实际上,一旦returnBooltrue|=都不会使其成为false,因为true | false == true

您实际上可以在第一次returnBooltrue时安全地从循环中脱离(除非方法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;