2015-02-08 112 views
-3

這是什麼意思?識別C++代碼問題

我有問題,因爲我沒有使用這種格式。

任何人都可以翻譯此條件嗎?

(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10); 
+0

重複? [here](http://stackoverflow.com/questions/24793916/shorthand-c-if-else-statement) – leigero 2015-02-08 07:13:41

回答

2

這是兩個三元運算符。三元運算符將if-else語句壓縮爲一行。 (expression ? fireOnTrue() : fireOnFalse())例如

if(D == 4) { 
    explode(); 
} else { 
    explodeTwice(); 
} 

可以寫成:

D == 4 ? explode() : explodeTwice() 

因此,如果我們採取(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10);並打破它,我們得到:

if(D == 4) { 
    (i % 2 == 0 ? 10 : 14); 
} else 
    10; 
} 

打破下來一個步驟給我們:

if(D == 4) { 
    if(i % 2 == 0) { 
     10; 
    } else { 
     14; 
    } 
} else 
    10; 
} 
0

表達式a? b:c僅僅意味着如果(a)則b,否則c。 因此,假設你的表達式求RETVAL,它可以寫成:

if(D == 4) 
{ 
    if(i%2 == 0) 
     retval = 10; 
    else 
     retval = 14; 
} 
else retval = 10; 
+0

謝謝你們:) – GeekUp 2015-02-08 11:39:09

1

讓我們通過一塊一塊的怪物。

(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10)

這行使用ternary operatorx ? y : z,它返回

  • y如果x == true
  • z如果x == false

(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10)首先檢查D是否等於4

  • 如果D等於4它返回(i % 2 == 0 ? 10 : 14)
  • 如果D不等於4它返回10

如果D恰好等於4然後表達(i % 2 == 0 ? 10 : 14)將被解析:

(i % 2 == 0 ? 10 : 14)首先檢查是否i % 2 == 0是真還是假。 %是其餘的又稱模運算符,它返回a % b的除法餘數a/b。

將結果與0進行比較與「均勻分配」相同,即無餘數。

的用於通過2分割其餘可以是01,從而:

  • 0如果i是偶數
  • 1如果i是奇數

在其它字,(i % 2 == 0 ? 10 : 14)將返回10如果i是偶數或14 if i單數。


總之,(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10)有取值爲1014取決於Di,像這樣:

  • 如果D == 4i甚至,它的計算結果10
  • 如果D == 4i是奇數,它評估爲14
  • D != 4如果,它的計算結果爲10

因此,表達式可以簡化爲一種方法,以這樣的:

int return10or14(int D, int i) { 
    if (D != 4 || i % 2 == 0) 
     return 10; 
    else 
     return 14; 
}