回答
这是两个三元运算符。三元运算符将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