三元运算符优先级和赋值

时间:2015-06-09 21:03:08

标签: c++ c++11 ternary-operator

我的代码中有一个不寻常的错误,有时我的代码会返回错误的值。我在函数中有一个三元表达式,可能是罪魁祸首,并且它是这样编写的;

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;代替。

1 个答案:

答案 0 :(得分:3)

是的,它们是等价的。 =来到最后。