2015-02-08 114 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; 
}