如何理解C++中的逻辑或||运算符?是否会引发vector越界访问?
逻辑判断执行逻辑解答
C++ 中内置的逻辑或运算符||采用短路求值规则,并不会预先计算两侧所有表达式再执行或运算,执行顺序如下:
- 优先计算
||左侧的表达式r - 1 < 0 - 若左侧表达式结果为
true,整个或运算的结果已经确定为true,右侧的mat[r-1][c] == 1会被直接跳过,不会执行 - 只有当左侧表达式结果为
false时,才会继续计算右侧的表达式
关于r=0时的越界问题
当r=0时,r-1 < 0的结果为true,触发短路规则,右侧访问mat[-1][c]的代码完全不会被执行,因此不会出现非法内存访问,这就是你的代码可以正常运行的核心原因。
额外补充:当前代码逻辑与需求不匹配
你提到需求是「判断元素是否处于左边缘,或者它的左侧元素为1」,但你当前写的判断逻辑是针对上一行同列元素的,和你的需求不符:
- 左边缘的判断条件应该是
c == 0 - 左侧元素的访问应该是
mat[r][c-1]
如果要实现你的原始需求,条件应该修改为:
if (c == 0 || mat[r][c-1] == 1)
内容的提问来源于stack exchange,提问作者BigTree
相关产品推荐
相关产品推荐

