当前位置:编程学习 > JAVA >>

关于if语句引出的问题(C++ VS javascript)

  最近转为学习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{  
  
}  
    这里记下开发中遇到的困惑,至于这两种语言的深层次问题笔者也说不清楚,做个总结先。
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,