类似的问题:
How is the comma operator being used here?
BOOL bShowLoadingIcon = FALSE;
if (sCurrentLevelId_5C3030 == 0 || sCurrentLevelId_5C3030 == 16 || (bShowLoadingIcon = TRUE, sCurrentLevelId_5C3030 == -1))
{
bShowLoadingIcon = FALSE;
}
在上面的代码示例中,sCurrentLevelId_5C3030的什么值/范围会导致bShowLoadingIcon设置为TRUE。
是否有可能将其设置为TRUE并同时也变为true(如果为表达式则全部设置),然后又设置回FALSE?我不知道(bShowLoadingIcon = TRUE, sCurrentLevelId_5C3030 == -1)
在做什么。
答案 0 :(得分:5)
C ++仅在需要时才计算布尔值OR。因此,如果sCurrentLevelId_5C30303
是0
或16
,则最后一条语句永远不会得到求值。
如果确实对(bShowLoadingIcon = TRUE, sCurrentLevelId_5C3030 == -1)
进行了评估,它将首先将bShowLoadingIcon
设置为TRUE
,然后对sCurrentLevelId_5C3030 == -1
的结果求值。如果是这样,那么bShowLoadingIcon
就会重新设置为FALSE
。
因此,总而言之,bShowLoadingIcon
被设置为FALSE
。然后,如果sCurrentLevelId_5C3030
既不是0
也不是16
,则bShowLoadingIcon
被设置为TRUE
,只有sCurrentLevelId_5C3030
被设置为false -1
。
因此,更概括地说,如果bShowLoadingIcon
既不是TRUE
也不是sCurrentLevelId_5C3030
,则0
会被设置为16
,并且只要{ {1}}不是sCurrentLevelId_5C303030
。
等效于:
-1
或者,如果您愿意:
BOOL bShowLoadingIcon = (
(sCurrentLevelId_5C3030 != 0) &&
(sCurrentLevelId_5C3030 != 16) &&
(sCurrentLevelId_5C3030 != -1)) ? TRUE : FALSE:
答案 1 :(得分:3)
在C ++中,逗号运算符(statementX, statementY
)首先执行statementX
,然后执行statementY
。该表达式保留第二条语句的值。
在您的代码中,为bShowLoadingIcon
分配了值TRUE
,然后C ++在if语句中检查的值是否为sCurrentLevelId_5C3030 == -1
。