2015-06-09 69 views
0

我在我的代碼中有一個不尋常的錯誤,有時,我的代碼將返回錯誤的值。我有一個可能是罪魁禍首的函數中的三元表達式,它是這樣寫的;三元運算符優先級和賦值

corpusBoard[i][j] = (piece == 'o') ? 'o' : 'x'; 

哪個應當說明,如果piece等於 '0',然後分配的 '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; 
} 

不幸的是,在極少數情況下,它會返回錯誤的值,即使如果片是'o',並且corpusBoard[i][j] == 'H',它應該始終將corpusBoard[i][j]分配給'o',但很少,它被賦予'x'。

+0

什麼類型是件? – donjuedo

+0

@ donjuedo:這是一個字符。 –

+0

從字面上看,你的問題只是關於等同性。但是你的bug聽起來很有趣。小心把你的項目減少到最低限度的例子? – donjuedo

回答

3

是的,它們是等效的。 =最後。