2013-01-14 102 views
1
bool OrderUtils::shouldCptyAutoexecute(int Id) 
{ 

bool res = 
    dummyCache::instance().getVal(Id).getWhitelabelType() == "ABCD"; 
if (!res) 
    res |= dummyCache::instance().getVal(Id).getIsPlc() == 1; 

return res; 
} 

上述代码检查2个Id,并在数据库中存在任何id时返回true。C++按位或运算符

你能否提出一种方法,我可以从数据库表中比较一个更多的值,并将值返回真值res ..还可以解释第二个if语句和第二个OR运算符是什么?

+0

如果我不知道更好,我还以为这是Java的。你可以通过使用一个容器来简化它,就像一个关联数组。 – Rapptz

+0

@ user1931177,你想比较3个字段,对不对? – billz

+0

第三个比较与逻辑与操作相结合,如(A || B)&& C,或者它只是第三个逻辑OR条件,A || B || C。 ?换句话说,请指定您希望用第三个字段建立的逻辑布尔条件。 – WhozCraig

回答

3

爵士,只是让短路EVAL为你做这个:

return dummyCache::instance().getVal(Id).getWhitelabelType() == "ABCD" || 
     dummyCache::instance().getVal(Id).getIsPlc() == 1; 

如果第一个是真实的,第二个将不火。此外,我向你保证一个远程合理的优化编译器不会重新火instance().getVal(id)如果返回的对象不是getWhitelabelType()getisPlc()调用之间改变。实际上,如果getWhiteLabelType()const,我会全部保证。 (而且它看起来应该是)。

关于一些工作。这个表情非常 - 很厉害。尽管它会起作用。除非我读错(和信任我的人的名单,会告诉我,我就会让我很快知道)它正在执行一个布尔EVAL,促进产生真/假boolint,促进res当前值从boolint(它是零,所以没有什么特别的有),按位的OR-ing,与表达int,然后降级最终诠释回一个bool在res来存储。我很惊讶,这并没有标示出编译器的至少一个警告。

它很可能应该是if (!res) res ||= expr,即使如此,它也是毫无意义的,因为您可以在此答案的顶部使用short circuit eval来完全删除本地res。考虑如果resfalse。那么等效表达式将是res = false || expr。但那只是res = expr。在它执行的!res状态中,您不妨使用赋值。

最后,关于增加第三场你的eval,这完全取决于你想要的补充。为了一个额外的逻辑OR,它非常简单。

对于像(A ||乙|| C)的表达,你可以只

return dummyCache::instance().getVal(Id).AField() == ATestValue || 
     dummyCache::instance().getVal(Id).BField() == BTestValue || 
     dummyCache::instance().getVal(Id).CField() == CTestValue; 

对于更复杂的操作,一些明智地使用括号会很长的路要走。例如,返回(A || B) && C

return (dummyCache::instance().getVal(Id).AField() == ATestValue || 
     dummyCache::instance().getVal(Id).BField() == BTestValue) && 
     dummyCache::instance().getVal(Id).CField() == CTestValue; 

或许(A && C) || (B && !C)(好吧,这是开始有点过分......)

return (dummyCache::instance().getVal(Id).CField() == CTestValue) 
     ? (dummyCache::instance().getVal(Id).AField() == ATestValue) 
     : (dummyCache::instance().getVal(Id).BField() == BTestValue); 
+0

+1,仍然需要'你能提出一种方法,我可以从数据库表中比较一个值,并返回值res'吗? – billz