在 C++ 中使用嵌套 if 语句与逻辑运算符 &&

0 c++ algorithm logic if-statement logical-operators

假设我有一个整数数组表示棋盘上的棋子;

int board[8][8];
Run Code Online (Sandbox Code Playgroud)

在我的国际象棋游戏中,我目前正在编写一个生成器函数,它将返回所有合法移动的整数向量

当然,我将使用if 语句

我现在需要检查棋盘上的某个元素对于棋盘上的一块

例如,如果我有一个棋子;

board[row][col] == 'p';
Run Code Online (Sandbox Code Playgroud)

我需要生成[row+1][col][row+2][col]并且在某些情况下,如果它可以攻击一块,那么列中也会发生变化。

但是如果一块位于 的任何边缘boardboard[row+1][col]将返回索引超出范围

出于这个原因,我需要一个额外的 if 语句。

我的问题是,我应该使用:

if (pieceisnotonedge && board[row+1][col] == 0)
Run Code Online (Sandbox Code Playgroud)

或者

if (pieceisnotonedge)
{
    if (board[row+1][col] == 0)
}
Run Code Online (Sandbox Code Playgroud)

对于第一个示例,如果pieceisnotonedge返回false,它还会检查下一个条件吗?因为如果是这样,那我就有麻烦了。

JeJ*_*eJo 5

对于第一个示例,如果pieceisnotonedge返回false,它还会检查下一个条件吗?

不,不会。因为内置的逻辑运算符短路. 从cppreference.com

内置运算符&&||执行短路评估(如果在评估第一个操作数后结果已知,则不 评估第二个操作数 ),但重载运算符的行为类似于常规函数调用并且始终评估两个操作数

因此,在

if (pieceisnotonedge && board[row+1][col] == 0)
Run Code Online (Sandbox Code Playgroud)

如果pieceisnotonedgefalse,则不会评估第二个。因此,嵌套ifs 是多余的,您可以使用第一个版本。