C++中有邏輯運算符&嗎?例如一個運算符,它的工作原理與& &一樣,只是它也評估後面的參數,即使前面的一些參數已經評估爲false?運營商&是我瞭解的按位和運營商。C++邏輯與運算符
回答
操作&的確是位運算符。我假設你有類似
if (f() && g()) { /*do something*/ }
而您想要F()和G()來執行,不論是否那一個被評價爲假。我建議你做點別的:
bool bF = f();
bool bG = g();
if (bF && bG) { /*do something*/ }
這也提供了更好的可讀性,不混淆其他程序員誰儘量保持你的代碼。從長遠來看,這是值得的。
這是做到這一點的最佳方式。 –
可以將'if(f()&& g())'改成'if((int)f()+(int)g()== 2)'這將強制兩個操作數進行求值。 – Nawaz
如果f()和g()返回int會怎麼樣?如果f()返回-1並且g()返回1,那麼f()&& g()會產生true,而你的條件會產生假... –
沒有邏輯&
,只能按位&
。
,如果你想避免邏輯語句的短路,則需要使用代理的將不被編譯器優化掉,以實現它(如可變參數元模板)。
如果您使用操作符重載& &,也不會短路。
struct Bool {
bool val;
Bool(bool f): val(f) {}
operator bool() {
return val;
}
};
bool operator&&(Bool a, Bool b) {
return (bool)a && (bool)b;
}
裁判:點19,雖然因爲有提到在C++ FAQ lite
13.9節,這是一個非常糟糕的主意和迷惑人。儘管如果你有一個非常特殊的情況,你可能想以非常有限的方式來做。
這是一件可怕的事情。 –
我不會向任何人推薦:D –
哇。這嚇壞了我從所有假設(正確)需要短路的代碼中引入的所有時髦副作用。 (例如,如果((a!= null)&&(a.foo = 123))...) – Joe
在C++中沒有這種「始終執行」的操作符。
我的第一個傾向是,而不是尋找一個新的運營商,你應該重新評估你的方法做什麼,以消除任何副作用,他們執行這一任務。通過這種方式可以簡單地使用&&
並且很開心。
但是如果你真的想要做的序列中的所有操作,然後看看他們都成功,可能Luchian格里戈雷的回答將是最好的。它清楚地描述了它始終需要執行的順序步驟。還有一個選項可以或可以不那麼清楚:
// Each method needs to execute in sequence but we use "success" to track overall success. The order of operands to `operator&&` shouldn't be changed.
bool success = f1();
success = f2() && success;
success = f3() && success;
if(success) ...
+1有用的技術學習。儘管我總是以「bool success = true」開頭;這樣所有的條件評估看起來都是一樣的。 –
我使用'success&= f2();' – MSalters
- 1. 邏輯與運算符與
- 2. 邏輯運算符Objective-C
- 3. C++邏輯運算符Q
- 4. C:邏輯運算符
- 5. C++邏輯與運算
- 6. 邏輯&&運算符
- 7. 邏輯運算符
- 8. 邏輯運算符||
- 9. 邏輯運算符
- 10. 結合邏輯運算符C
- 11. C++運算符重載邏輯opertors
- 12. C# - 解析包含邏輯運算符
- 13. 被C++邏輯OR(||)運算符困惑
- 14. c語言的邏輯運算符misunderestanding
- 15. 邏輯運算符和位操作C
- 16. C#中邏輯運算符的結構#
- 17. C中三元運算符的邏輯?
- 18. 使用(邏輯):運算符C#
- 19. 與使用jQuery邏輯運算符
- 20. 與列表邏輯運算符
- 21. 使用邏輯運算符與宏
- 22. 問題與`AND`邏輯運算符mySQL
- 23. 按位與邏輯運算符
- 24. Javascript:使用邏輯運算符與比較運算符
- 25. Python邏輯運算符
- 26. 結合邏輯運算符
- 27. 邏輯運算符或者
- 28. 邏輯比較運算符
- 29. Java邏輯運算符
- 30. Javascript邏輯運算符:?
爲什麼你需要那個?對於我可以想象的所有用例,您應該修復混合邏輯條件和強制性副作用的混亂情況。 – delnan
@Ziyao Wei - 再讀一遍:) at delnan - 我同意你的看法。 –
@Kiril:Noticed;) –