和返回C ++中的语句

时间:2017-07-11 07:42:23

标签: c++

我正在试图弄清楚"和#34;正在发生什么。从这个代码示例的返回行中的语句,有人可以告诉我这些"和"的目的是什么?一个函数返回的语句是?   如果只有其中一个是假的,它会向调用它的函数返回false吗?

return !UsedInRow(board, row, num) && !UsedInCol(board, col, num) &&
       !UsedInBox(board, row - row % 3 , col - col % 3, num);

6 个答案:

答案 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)

UsedInRowUsedInCol都是返回bool的函数(或者可以转换为bool的类型)。 &&运算符只是将函数的返回值链接在一起,从而产生最终的bool结果,从而产生truefalse,然后返回。

请注意,在这种情况下,并非所有函数都必须由于短路评估而运行,也就是说,如果三个布尔表达式中的一个是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;