关于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++ ,