java与C++中的后置自增操作符++_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > java与C++中的后置自增操作符++

java与C++中的后置自增操作符++

 2011/11/7 8:04:11  tuojian.tj  http://tuojian-tj.iteye.com  我要评论(0)
  • 摘要:在前置自增与后置自增操作中,当属后者最为麻烦。某书中有一道简单的题目如下几行Java代码:importjava.util.*;publicclassText{publicstaticvoidmain(String[]args){intj=0;for(inti=0;i<100;i++)j=j++;System.out.println(j);}}执行结果是多少?我当时写了两个答案:0,100.第一个答案:0是因为对于后置++操作符,号称用了中间缓存变量机制,其实内部实现大致如下temp=j
  • 标签:c++ Java 操作 操作符
在前置自增与后置自增操作中,当属后者最为麻烦。

某书中有一道简单的题目
如下几行 Java 代码:
import java.util.*;
public class Text{
    public static void main(String[] args){
        int j = 0;
        for(int i = 0; i < 100; i++)
            j = j++;
        System.out.println(j);
    }
}

执行结果是多少? 我当时写了两个答案:0,100.
第一个答案:0 是因为对于后置++caozuofu.html" target="_blank">操作符,号称用了中间缓存变量机制,其实内部实现大致如下
temp = j;
j = j + 1;
j = temp;

第二个答案:100,
为什么呢?请看以下一段C++代码
#include <iostream>
using namespace std;
int main()
{
    int j = 0;
    for(int i = 0; i < 100; i++)
        j = j++;

    cout << j << endl;
    return 0;
}
结果是就是100。

难道C++就没有中间缓存变量机制?当然不是。

导致Java和C++在这方面的区别的原因不在机制本身,而在于编译器的问题。在C++中,后置自增同样会比前置自增多了一份中间缓存的工作。但是请注意,在C++中,一些基本类型如int,double以及指针类型,在进行后置自增操作的时候,编译器将会为这些类型省去中间缓存变量的操作,采取其它方式(我猜是直接按照优先级拆分代码)。

所以在这方面,Java与C++显得有点不同,或者性能与C++显得不足。我是这样评估的,在Java中前置自增的性能总是要比后置自增性能要好(没有缓存变量赋值);C++中大部分也是这样,但是如果是对基本类型和指针进行后置自增操作,那么性能将和前置自增一样。

但是一般不建议在复合语句中使用后置自增,尽量用前置自增。因为在后置自增中,C++只保证自增在所在语句执行后进行自增,却没有保证在什么时候自增(虽然几乎所有的都是在当前语句执行完之后马上自增,但是据我所知,C++并没有提供这方面的保证,这是一个令人惊讶的现实)
上一篇: 什么是堆栈 下一篇: 前向引用声明
发表评论
用户名: 匿名