我的代码中有一个不寻常的错误,有时我的代码会返回错误的值。我在函数中有一个三元表达式,可能是罪魁祸首,并且它是这样编写的;
corpusBoard[i][j] = (piece == 'o') ? 'o' : 'x';
如果piece
等于' o'则应说明,然后分配' o'到corpusBoard[i][j]
,否则分配' x'到corpusBoard[i][j]
。
以下这两个陈述是否相同?如果没有,为什么?
corpusBoard[i][j] = (piece == 'o') ? 'o' : 'x';
corpusBoard[i][j] = ((piece == 'o') ? 'o' : 'x');
修改
我遇到的一个特殊问题是我正在进行的项目,系统检查匹配的数据库,然后将玩家片段实例化为数据库中的字符。因为这些作品可以是“' o'或者' x',我想要一个简单的方法来"翻转"在数据库中进行模式匹配时:
std::vector<std::vector<char>> Machine::matchCorpus(std::vector<std::vector<char>> corpusBoard)
{
for(int i = 0; i < corpusBoard.size(); i++){
for(int j = 0; j < corpusBoard[0].size(); j++){
if(corpusBoard[i][j] == 'M'){
corpusBoard[i][j] = ((piece == 'o') ? 'x' : 'o');
}
if(corpusBoard[i][j] == 'H'){
corpusBoard[i][j] = ((piece == 'o') ? 'o' : 'x');
}
}
}
return corpusBoard;
}
不幸的是,在非常罕见的情况下,它会返回错误的值,即使它是&#39; o&#39;和corpusBoard[i][j] == 'H'
,也应始终将corpusBoard[i][j]
分配给&#39 ; o&#39;,但很少,它被分配&#39; x&#39;代替。
答案 0 :(得分:3)
是的,它们是等价的。 =来到最后。