三元运算符优先级和赋值

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'。

是的,它们是等价的。 = 最后一个。