2013-01-14 115 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