最近转为学习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");
}
运行结果:
test
ok2
测试二、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{
}
这里记下开发中遇到的困惑,至于这两种语言的深层次问题笔者也说不清楚,做个总结先。
2018-09-04更新---纠错:
这是两种语言的编译机制不同,C++为先编译后运行,js为动态编译。所以从语言角度,C++比js更高效,唉,以前认识不深,也不改了,当是日记。
作者:kunoy
申明:作者写博是为了总结经验,和交流学习之用。
如需转载,请尽量保留此申明,并在文章页面明显位置给出原文连接。谢谢!