最近轉為學習c++,進行了一些c++的項目開發,熟悉了js語言特性的我,一時間編程遇到很大困難,其中很困惑的就是條件判斷的問題,這裡以c++、js進行比較說明。首先看幾個測試。 測試一、c++源碼: [cpp] int test(){ printf("test\n"); return 1; } int main() { int i=0; if(i&test()) printf("ok1"); else printf("ok2"); } 運行結果: [cpp] view plaincopy test ok2 測試二、js源碼: [javascript] function test(){ console.log("test"); return 1; } var i=0; if(i&&test()) console.log("ok1"); else console.log("ok2"); 運行結果: [javascript] ok2 從原理上說,雖然i=0對於if條件來說,不管test函數返回的結果如何,與運算後都為0(假),結果應該是"ok2”,而兩種語言在這上面的運行機制完全不一樣,顯然c++做了很多無用功。下面再看看或運算如何。 測試三、c++源碼: [cpp] int test(){ printf("test\n"); return 0; } int main() { int i=1; if(i||test()) printf("ok1"); else printf("ok2"); } 運行結果: [cpp] ok1 測試四、js源碼: [javascript] function test(){ console.log("test"); return 0; } var i=1; if(i||test()) console.log("ok1"); else console.log("ok2"); 運行結果: [javascript] ok1 在或運算上,c++和js語言判斷機制相同,當第一個條件為真時,不再判斷並列條件test函數的結果。 個人是比較困惑,於是再對c#進行測試。 測試五、c#源碼: [csharp] using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string con = ""; bool test() { con += "test"; return true; } private void button1_Click(object sender, EventArgs e) { con = ""; bool i = false; if (i&&test()) con += "ok1"; else con += "ok2"; MessageBox.Show(con); } } } 運行結果: 說明c#與js機制相同。 至於為什麼要這樣比較,是因為假如有兩個條件A、B,A和B都成立時做一件事,其中A不成立B就一定不成立,那麼用js,語句就可以這樣寫: [javascript] if(A&&B){ }else{ } 當A不成立時,自然不再判斷B,這樣運行效率沒有影響,但如果用c++來寫,兩個條件都會判斷,效率就有影響了,所以得這樣寫: [cpp] if(A){ if(B){ } }else{ } 這裡記下開發中遇到的困惑,至於這兩種語言的深層次問題筆者也說不清楚,做個總結先。