c ++中的IF循环行为

Geo*_*rge 2 c++ loops if-statement max

我需要在图像中找到一个像素与其周围的8个像素相比具有最大值的情况.

我不确定什么是最佳方式,所以我的想法是使用if语句:

if(pixel > pixel1 && pixel > pixel2 && pixel > pixel3 && ... && pixel> pixel8)
Run Code Online (Sandbox Code Playgroud)

我的问题如下:如果它发现例如像素不大于pixel1,它是否仍会检查语句的其余部分,或者因为它只是AND,它是否已经丢弃指令并进一步?

如果答案是第一个,这会使得每次检查每个像素的计算量很大,有人可以给我一个暗示,如何更有效地处理这个简单的问题吗?

Kar*_*k T 9

这称为短路评估.

如果第一个参数不足以确定表达式的值,则仅执行或计算第二个参数


由于条件是&&,它不会进一步检查它是否false在任何条件下得到.

同样,如果条件是||,它会在找到a后停止检查true.


顺便说一句,我并不完全确定优先规则,因此我会围绕括号中的每个条件只是为了安全.

if((pixel > pixel1) && (pixel > pixel2) && ...
Run Code Online (Sandbox Code Playgroud)

编辑:运算符优先级规则似乎表明在这种情况下括号是不必要的.