[英]C++ logical & operator
C ++中是否有邏輯&運算符? 例如,一個與&&一樣工作的運算符,除了它還評估后面的參數,即使前面的參數已經評估為false? 運算符&是我理解的按位和運算符。
運算符&確實是按位運算符。 我假設你有類似的東西
if ( f() && g() ) { /*do something*/ }
並且你想要執行f()和g(),無論其中一個是否被評估為false。 我建議你做點其他事情:
bool bF = f();
bool bG = g();
if ( bF && bG ) { /*do something*/ }
這也提供了更好的可讀性,並且不會混淆嘗試維護代碼的其他程序員。 從長遠來看,這是值得的。
在C ++中沒有這樣的“always execute”操作符。
我的第一個傾向是,您應該重新評估您的方法所做的工作,以消除任何強制執行它們的副作用,而不是尋找新的操作符。 以這種方式可以簡單地使用&&
並且快樂。
但是如果你真的想按順序完成所有操作,然后看看它們是否都成功了,那么Luchian Grigore的回答可能是最好的。 它清楚地描述了它始終需要執行的順序步驟。 還有一個選項可能會或可能不會更清楚:
// 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) ...
沒有邏輯&
,只有一個按位&
。
如果你想避免邏輯語句的短路,你需要使用一個代理,不會被編譯器優化掉來實現它(比如一個可變元元模板)。
如果操作員&&過載,它不會短路。
struct Bool {
bool val;
Bool(bool f): val(f) {}
operator bool() {
return val;
}
};
bool operator&&(Bool a, Bool b) {
return (bool)a && (bool)b;
}
ref:第19點, C ++ FAQ lite中的第13.9節
雖然如上所述,這是一個非常糟糕的主意 ,讓人困惑。 如果您有一個非常特殊的情況,您可能希望以非常有限的方式進行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.