我正在试图弄清楚"和#34;正在发生什么。从这个代码示例的返回行中的语句,有人可以告诉我这些"和"的目的是什么?一个函数返回的语句是? 如果只有其中一个是假的,它会向调用它的函数返回false吗?
return !UsedInRow(board, row, num) && !UsedInCol(board, col, num) &&
!UsedInBox(board, row - row % 3 , col - col % 3, num);
答案 0 :(得分:4)
相当于
bool a;
a = UsedInRow(board, row, num);
if (a) return false;
a = UsedInCol(board, col, num);
if (a) return false;
a = UsedInBox(board, row - row % 3 , col - col % 3, num);
if (a) return false;
return true;
由于&&
的短路性质以及评估是从左到右的事实。
(即使函数参数通过引用传递并在函数中修改,也是如此,因为&&
是排序点。)
答案 1 :(得分:0)
如果只有其中一个为false,它会向调用它的函数返回false吗?答案是肯定的。 这将使其他函数的计算停止为False和任何值=>假
这将根据UsedIn *函数返回的值返回True或False。 这是为了检查号码是否为数字'可以插入Suduko。这将检查数字是否可以插入给定的单元格中,前提是它存在于该行,列或框中。
答案 2 :(得分:0)
UsedInRow
和UsedInCol
都是返回bool
的函数(或者可以转换为bool
的类型)。 &&
运算符只是将函数的返回值链接在一起,从而产生最终的bool
结果,从而产生true
或false
,然后返回。
请注意,在这种情况下,并非所有函数都必须由于短路评估而运行,也就是说,如果三个布尔表达式中的一个是false
那么(因为&&
)结果不可能是true
,因此不会评估尚未评估的函数。
答案 3 :(得分:0)
如果执行此!UsedInRow(board, row, num)
返回false,则return
语句将自动返回flase而不执行其他两个语句
如果!UsedInRow(board, row, num)
仅返回true,则第二个语句!UsedInCol(board, col, num)
将被执行,现在如果返回false,则return
语句将返回false,否则将执行第三个语句
现在,如果!UsedInBox(board, row - row % 3 , col - col % 3, num)
此语句的计算结果为真,则return
语句将返回true,否则将返回false
因此,为了从return
语句中得到真实,应评估所有三个条件以获得true
值
答案 4 :(得分:-1)
是的,它的作用与if
语句完全相同。如果任何Used
函数返回true,则整个返回值将计算为false。
答案 5 :(得分:-1)
&& operator返回bool值(true或false),因此表达式等效于:
if (!UsedInRow(board, row, num) && !UsedInCol(board, col, num) &&
!UsedInBox(board, row - row % 3 , col - col % 3, num)
return true;
else
return false;
你也可以找到某些类似的表达式,它们也有相同的结果:
return (!UsedInRow(board, row, num) && !UsedInCol(board, col, num) && !UsedInBox(board, row - row % 3 , col - col % 3, num))?true:false;