C ++三元运算符逻辑

时间:2012-01-11 18:47:25

标签: c++ ternary-operator

我无法弄清楚if语句的作用。这不是我的代码所以我只是想了解Ternary运算符正在做什么。

    if((model[STRIDE].isLogging == true ? model[STRIDE].value           : g_uiStride)   == g_uiStride &&
       (model[NUMVERTS].isLogging == true ? model[NUMVERTS].value       : NumVertices)  == NumVertices &&
       (model[PRIMCOUNT].isLogging == true ? model[PRIMCOUNT].value     : primCount)    == primCount &&
       (model[STARTINDEX].isLogging == true ? model[STARTINDEX].value   : startIndex)   == startIndex)
    {

5 个答案:

答案 0 :(得分:5)

首先,

(model[STRIDE].isLogging == true ? model[STRIDE].value : g_uiStride) == g_uiStride

可写:

(model[STRIDE].isLogging ? model[STRIDE].value : g_uiStride) == g_uiStride

三元

model[STRIDE].isLogging ? model[STRIDE].value : g_uiStride

检查model[STRIDE].isLogging是否为真。如果是,则采用值model[STRIDE].value。如果不是,则取值g_uiStride。然后将其与g_uiStride进行比较。

因此,如果它没有记录,则该部分自动为真,因为g_uiStride与其自身进行比较。如果是记录,则mode[STRIDE].value == g_uiStride为真 和

答案 1 :(得分:3)

#1. 
if (model[STRIDE].isLogging is true then 
    RESULT1 = (model[STRIDE].value == g_uiStride) else
    RESULT1 = (g_uiStride == g_uiStride)
   )   

#2. 
if (model[NUMVERTS].isLogging is true then 
    RESULT2 = (model[NUMVERTS].value == NumVertices) else
    RESULT2 = (mVertices == NumVertices)
   )        

#3. 
if (model[PRIMCOUNT].isLogging is true then
    RESULT3 = (model[PRIMCOUNT].value == primCount) else
    RESULT3 = (primCount == primCount)
   }   

#4. 
if (model[STARTINDEX].isLogging is true then
    RESULT4 = (model[STARTINDEX].value == startIndex) else
    RESULT4 = (startIndex == startIndex)
   )   

if (RESULT1 && RESULT2 && RESULT3 && RESULT4) {
    /* yay */
} else {
    /* damn */
}   

答案 2 :(得分:1)

通常,三元条件运算符使用条件在两个选项之间进行选择:

condition ? first_alternative : second_alternative

在这种情况下,通过将true和一个对象与自身进行比较,非常不必要地复杂化

if((model[STRIDE].isLogging == true ? model[STRIDE].value : g_uiStride) == g_uiStride 

这可以简化为

if((model[STRIDE].isLogging ? model[STRIDE].value : g_uiStride) == g_uiStride 

也等同于

if (model[STRIDE].value == g_uiStride || !model[STRIDE].isLogging

告诉我们value等于某个全局值,或者我们不在乎,因为我们还没有记录。

答案 3 :(得分:0)

三元运算符如下:

(condition) ? value_for_true_condition : value_for_false_condition

(model[STRIDE].isLogging == true ? model[STRIDE].value : g_uiStride)首先检查是否isLogging == true,(条件)。如果条件为真,则使用model[STRIDE].value值,如果不是,则使用g_uiStride值。

整个语句检查模型的所有成员的值,但仅限于成员.isLogging == true。否则它使用默认值。请注意,如果所有成员都将.isLogging变量设置为false,则此语句将始终为true。

答案 4 :(得分:0)

blah = (model[STRIDE].isLogging == true ? model[STRIDE].value           : g_uiStride)

相同
if  (model[STRIDE].isLogging) {
   blah =  model[STRIDE].value ;
} else {
   blah =  g_uiStride;
}