我无法弄清楚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)
{
答案 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;
}