关于if语句引出的问题(C++ VS javascript)
最近转为学习c++,进行了一些c++的项目开发,熟悉了js语言特性的我,一时间编程遇到很大困难,其中很困惑的就是条件判断的问题,这里以c++、js进行比较说明。首先看几个测试。
测试一、c++源码:
int test(){printf("test\n");return 1;}int main(){int i=0; if(i&test()) printf("ok1"); else printf("ok2");}
运行结果:
testok2
测试二、js源码:
function test(){ console.log("test"); return 1;}var i=0;if(i&&test()) console.log("ok1"); else console.log("ok2");
运行结果:
ok2
从原理上说,虽然i=0对于if条件来说,不管test函数返回的结果如何,与运算后都为0(假),结果应该是"ok2”,而两种语言在这上面的运行机制完全不一样,显然c++做了很多无用功。下面再看看或运算如何。
测试三、c++源码:
int test(){printf("test\n");return 0;}int main(){int i=1; if(i||test()) printf("ok1"); else printf("ok2");}
运行结果:
ok1
测试四、js源码:
function test(){ console.log("test"); return 0;}var i=1;if(i||test()) console.log("ok1"); else console.log("ok2");
运行结果:
ok1
在或运算上,c++和js语言判断机制相同,当第一个条件为真时,不再判断并列条件test函数的结果。
个人是比较困惑,于是再对c#进行测试。
测试五、c#源码:
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,语句就可以这样写:
if(A&&B){}else{}
当A不成立时,自然不再判断B,这样运行效率没有影响,但如果用c++来写,两个条件都会判断,效率就有影响了,所以得这样写:
if(A){ if(B){ }}else{}
这里记下开发中遇到的困惑,至于这两种语言的深层次问题笔者也说不清楚,做个总结先。
如需转载,请尽量保留此申明,并在文章页面明显位置给出原文连接。谢谢!