short-circuiting

    0熱度

    3回答

    誰能告訴我爲什麼這個在運行時提供了一個錯誤: Dim mightBeNothing As List(Of String) = Nothing Dim a As List(Of String) = IIf(mightBeNothing Is Nothing, New List(Of String)(), New List(Of String)(mightBeNothing)) 我在第二行越來越

    6熱度

    1回答

    比方說,我有一個簡單的功能是這樣的: int all_true(int* bools, int len) { if (len < 1) return TRUE; return *bools && all_true(bools+1, len-1); } 該功能可以在一個更明顯的尾遞歸風格被改寫爲: int all_true(int* bools, int len) {

    2熱度

    1回答

    鑑於典型的編碼咒語是「不要在方法調用中誘發副作用」。並且唯一的原因(我知道 - 請指教我,如果我錯了)不使用短路操作符的時候,是在隨後的代碼中依賴方法調用的副作用。爲什麼C#和VB.NET等語言中的默認運算符不是短路版本? IE: if (Method1() & Method2()) { } if Method1 And Method2 then End if if (Method1(

    5熱度

    2回答

    這是由this question直接啓發。 有很多引用/聲明,位運算符應用於布爾值時不會短路。換句話說,boolean a = f() & g(),其中f()和g()都返回布爾值,兩個總是會被評估。 然而,JLS只是說: 15.22.2布爾邏輯運算符&,^和| 當兩個操作數的一個&,^或|運算符是布爾類型或布爾類型,那麼位運算符表達式的類型爲布爾型。在所有情況下,操作數 必要時都會進行拆箱轉換(§

    5熱度

    5回答

    我正在研究C的基礎知識,並試圖解決下面的問題,任何人都可以解釋爲什麼變量c的輸出是不同的? 以下程序的輸出是什麼? int main() { int a = -3, b = 2, c= 0, d; d = ++a && ++b || ++c; printf ("a = %d, b = %d, c = %d, d = %d", a, b, c, d); } 答案

    4熱度

    3回答

    一些運營商如&&和||執行短路評估。另外,當使用參數調用函數時,所有參數都是在調用函數之前構造的。 例如,採取以下三種功能 bool f1(); bool f2(); bool f3(bool, bool); 如果我叫 if(f3(f2(),f1()))//Do something 然後f3調用之前都f2和f1的返回值進行評估。 但,如果我用了(常規)operator||代替f3,比上

    5熱度

    6回答

    在許多語言中,如果你寫沿 if (foo() || bar() || foobar()) { /* do stuff */ } 和Foo(東西線)返回true,則巴()和foobar的()將不進行評估。 假設我有以下的Clojure代碼: (let [a (simple-function args) b (complex-function args) c (too-la

    4熱度

    3回答

    我目前正在爲一種非常有限的面嚮對象語言開發編譯器。我想把所有的值作爲對象來處理,這些值的操作符將作爲方法來實現。編譯器將程序轉換爲基於堆棧的虛擬機的彙編程序。 在編譯過程中,我將整數文字轉換爲特殊「整數」類的對象。算術運算符被實現爲該類的方法(使用內聯彙編程序)。所以4 + 5基本上等於4.add(5)。 我現在面臨的問題是布爾值的特殊情況。如果有if聲明: if(10 > 5 || 12 < 1

    23熱度

    8回答

    什麼是以下(總部設在JS風格)在PHP相當於: echo $post['story'] || $post['message'] || $post['name']; 所以,如果存在的故事,然後張貼;或者如果消息存在後,等等...

    2熱度

    3回答

    也許我錯過了一些相當簡單的事情,但即使我在表達式的開頭檢查了一個指針,但是我得到了一個崩潰。 if(var1 && bool1 || bool2 && var1->DoSomething()) { } var1是一個空指針,但是Var1-> Dosomething()仍然被調用。我的理解是,& &和|| C++中的運算符是短路的,所以如果var1爲空,那麼它只會在最開