C++ C++;三值运算符逻辑
我很难弄清楚这个if语句在做什么。这不是我的代码,所以我只是想了解三元运算符在做什么C++ C++;三值运算符逻辑,c++,ternary-operator,C++,Ternary Operator,我很难弄清楚这个if语句在做什么。这不是我的代码,所以我只是想了解三元运算符在做什么 if((model[STRIDE].isLogging == true ? model[STRIDE].value : g_uiStride) == g_uiStride && (model[NUMVERTS].isLogging == true ? model[NUMVERTS].value : NumVertices) == Num
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)
{
三元运算符如下所示:
(condition) ? value_for_true_condition : value_for_false_condition
(model[STRIDE].isLogging==true?model[STRIDE].value:g_uiStride)
首先检查isLogging==true
,(条件)。如果条件为true,则使用model[STRIDE].value
值,如果条件为true,则使用g_uiStride
值
语句作为一个整体检查模型的所有成员上的值,但仅当成员.isLogging==true
时才检查。否则,它将使用默认值。请注意,如果所有成员都将.isLogging
变量设置为false,则此语句将始终为true。首先
(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
检查模型[STRIDE].isLogging是否为真。如果是,则采用值model[STRIDE].value
。如果不是,则取值g_uiStride
。然后将其与g_uiStride进行比较
因此,如果它没有记录,那么这一部分将自动为真,因为g_uiStride
将与它自身进行比较。如果它正在记录,则如果mode[STRIDE].value==g_uiStride
及
与
if (model[STRIDE].isLogging) {
blah = model[STRIDE].value ;
} else {
blah = g_uiStride;
}
通常,三元条件运算符使用一个条件在两个选项中进行选择:
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
<>告诉我们,<代码>值<代码>等于一些全局值,或者我们不关心,因为我们没有记录。无论如何,你知道三元操作符是如何工作的吗?你知道多少C++?你是从一本好书开始的吗?Pfff,这个公式我也有问题。看起来像
true的位?模型[STARTINDEX]。值:例如STARTINDEX
。这不也让你皱眉吗?当然我能弄明白,但它肯定会用更多的括号!但是,由于模型[STRIDE].value是整数,而模型[STRIDE].isLogging是布尔值,这是否意味着模型[STRIDE].value接收到1或0,您如何知道与self的比较结果为true?您是否曾重载运算符或使用过double
s?user1143896:model[STRIDE]。结果中未指定值。三元语句的结果取代了整个语句。Kerrek SB:我的C++天是很久以前的事了,我不知道你的意思。你是说==可能过载了?它有相同的短路吗?此外,您可能会匆忙假设g_uiStride==g_uiStride
始终是true
,这我们不知道。我们什么都不知道,但假设没有调用abort()
的操作符[]
重载,我认为这已经足够接近了。:-)
if((model[STRIDE].isLogging ? model[STRIDE].value : g_uiStride) == g_uiStride
if (model[STRIDE].value == g_uiStride || !model[STRIDE].isLogging