2017-07-11 109 views
-2

我想弄清楚这个代码示例返回行中的“和”语句是怎么回事,有人可以告诉我这些“和”语句的目的是什么在返回一个函数是? 如果其中只有一个是错误的,它会将错误返回给调用它的函数吗?并在语句返回C++

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

它只是返回的结果布尔表达式。 –

+2

'&&'操作符是*表达式*的一部分,而不是语句。它和其他地方的逻辑和'&&'一样。 –

+0

你问什么函数'AND(x1,x2,...,xn)'哪里'x'是布尔变量返回?如果是这样,那么在启动任何编程语言之前应该知道。 – DeiDei

回答

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; 

由于短路&&性质和事实,即评价是由左到右。

(即使该函数的参数通过引用传递和功能修改这成立,作为&&测序点。)

0

如果其中只有一个是假的,它会返回false到调用它的函数吗?答案是肯定的。 这将停止进一步函数的计算为False并且任何值=> False。

这将基于UsedIn *函数返回的值返回True或False。 这是为了检查数字'num'是否可以在Suduko中插入。这将检查数字是否可以插入给定的单元格,只要它存在于该行,列或框中。

0

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

请注意,由于短路评估,并非所有功能都需要运行,也就是说,如果三个布尔表达式中的一个是false,那么(因为&&)结果不可能是true,因此尚未评估的函数将不会被评估。

-1

是的,它的工作原理与if语句完全相同。如果任何Used函数返回true,则整个返回值将计算为false。

0

如果!UsedInRow(board, row, num)这个执行返回false,那么return声明将自动不执行其他两个语句

如果!UsedInRow(board, row, num)返回true只有第二条语句!UsedInCol(board, col, num)将得到执行,如果它返回false,那么return语句返回FLASE现在将返回false,否则第三条语句将得到执行

现在,如果!UsedInBox(board, row - row % 3 , col - col % 3, num)这个语句评估为真return语句将返回否则真就返回false

因此,为了从return说法得到真正的所有三个条件进行评估,以获得true

-1

的& &操作返回一个布尔值(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;