回答
這是兩個三元運算符。三元運算符將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;
}
表達式a? b:c僅僅意味着如果(a)則b,否則c。 因此,假設你的表達式求RETVAL,它可以寫成:
if(D == 4)
{
if(i%2 == 0)
retval = 10;
else
retval = 14;
}
else retval = 10;
謝謝你們:) – GeekUp 2015-02-08 11:39:09
讓我們通過一塊一塊的怪物。
(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
分割其餘可以是0
或1
,從而:
0
如果i
是偶數1
如果i
是奇數
在其它字,(i % 2 == 0 ? 10 : 14)
將返回10
如果i
是偶數或14
if i
單數。
總之,(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10)
有取值爲10
或14
取決於D
和i
,像這樣:
- 如果
D == 4
和i
甚至,它的計算結果10
- 如果
D == 4
和i
是奇數,它評估爲14
D != 4
如果,它的計算結果爲10
因此,表達式可以簡化爲一種方法,以這樣的:
int return10or14(int D, int i) {
if (D != 4 || i % 2 == 0)
return 10;
else
return 14;
}
- 1. C代碼和bug識別
- 2. ID密碼識別問題
- 3. 問題語音識別c#
- 4. 識別VBA代碼
- 5. QR代碼識別
- 6. C++代碼問題
- 7. C#代碼不能識別它自己?
- 8. 解析和識別C#代碼
- 9. CodeLite無法識別任何C++代碼
- 10. 識別mysql問題
- 11. C#語音識別(System.Speech.Recognition)問題
- 12. 我的代碼有什麼問題,它不會識別位置?
- 13. emacs識別python和html代碼混合的問題
- 14. 如何識別vb.net代碼,aspx代碼
- 15. JVM的代碼識別
- 16. 自動代碼識別
- 17. meta_where代碼未被識別
- 18. C#代碼URl問題
- 19. Collatz C++代碼問題
- 20. 代碼C有問題#
- 21. XNA C#代碼問題
- 22. 序識別問題 - QTP
- 23. 手勢識別器問題
- 24. document.objSecuBSP.OpenDevice生物識別問題
- 25. 問題識別從GUIDS
- 26. 語音識別問題
- 27. Android活動識別問題
- 28. 問題,「/ *?無法識別
- 29. 無法識別Jmeter問題
- 30. Tesseract - 識別文本問題
重複? [here](http://stackoverflow.com/questions/24793916/shorthand-c-if-else-statement) – leigero 2015-02-08 07:13:41