簡體   English   中英

C ++邏輯和運算符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM