三元运算符优先级和赋值
Ternary operator precedence and assignment
我的代码中有一个不寻常的错误,有时我的代码会 return 错误的值。我在一个函数中有一个三元表达式可能是罪魁祸首,它是这样写的;
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',我想要一种在数据库中进行模式匹配时 "flip" 它们的简单方法:
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;
}
不幸的是,在极少数情况下,它 return 的值是错误的,即使 piece 是 'o' 和 corpusBoard[i][j] == 'H'
,它也应该始终分配 corpusBoard[i][j]
'o',但很少,它被分配给 'x'。
是的,它们是等价的。 = 最后一个。
我的代码中有一个不寻常的错误,有时我的代码会 return 错误的值。我在一个函数中有一个三元表达式可能是罪魁祸首,它是这样写的;
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',我想要一种在数据库中进行模式匹配时 "flip" 它们的简单方法:
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;
}
不幸的是,在极少数情况下,它 return 的值是错误的,即使 piece 是 'o' 和 corpusBoard[i][j] == 'H'
,它也应该始终分配 corpusBoard[i][j]
'o',但很少,它被分配给 'x'。
是的,它们是等价的。 = 最后一个。