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]并且在某些情况下,如果它可以攻击一块,那么列中也会发生变化。
但是如果一块位于 的任何边缘board,board[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,它还会检查下一个条件吗?因为如果是这样,那我就有麻烦了。
对于第一个示例,如果
pieceisnotonedge返回false,它还会检查下一个条件吗?
不,不会。因为内置的逻辑运算符会短路. 从cppreference.com:
内置运算符
&&并||执行短路评估(如果在评估第一个操作数后结果已知,则不 评估第二个操作数 ),但重载运算符的行为类似于常规函数调用并且始终评估两个操作数
因此,在
if (pieceisnotonedge && board[row+1][col] == 0)
Run Code Online (Sandbox Code Playgroud)
如果pieceisnotonedge是false,则不会评估第二个。因此,嵌套ifs 是多余的,您可以使用第一个版本。