(C++)i++和++i,哪个效率高一些

38人阅读 评论(0) 收藏 举报
分类:

在看《程序员面试笔试宝典》时,发现了这样一个问题,书中只给出了++i的效率高一些,但并没有给出具体的解释和说明。

在网上找到下面的答案:

1、从高级层面上解释

++i 是i=i+1,表达式的值就是i本身

i++ 也是i=i+1,但表达式的值是加1前的副本,由于要先保存副本,因此效率低一些。

对于C++内置类型而言,大部分编译器会做优化,因此效率没什么区别。但在自定义类型上,就未必有优化,++i 效率会高一些。

2、从底层汇编来看内置类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int a,i=0; a=++i;汇编代码如下:
 
int a,i=0;
01221A4E mov dword ptr [i],0
a=++i;
01221A55 mov eax,dword ptr [i]
01221A58 add eax,1
01221A5B mov dword ptr [i],eax
01221A5E mov ecx,dword ptr [i]
01221A61 mov dword ptr [a],ecx
 
int a,i=0; a=i++;汇编代码如下:
 
int a,i=0;
009E1A4E mov dword ptr [i],0
a=i++;
009E1A55 mov eax,dword ptr [i]
009E1A58 mov dword ptr [a],eax
009E1A5B mov ecx,dword ptr [i]
009E1A5E add ecx,1
009E1A61 mov dword ptr [i],ecx

从上述汇编代码可以看到,对于内置类型,它们的执行数目是一样的,效率没有差别。

3、从重载运算符来看自定义类型

1
2
3
4
5
6
7
8
9
10
11
12
13
Operator Operator::operator++()
{
++value; //内部成员变量
return *this;
}
 
Operator Operator::operator++(int)
{
Operator temp;
temp.value=value;
value++;
return temp;
}

从上面代码可以看出,后置++多了一个保存临时对象的操作,因此效率自然低一些。

总结:

对于C++内置类型,两者的效率差别不大;

对于自定义的类而言,++i 的效率更高一些。

 

参考文章:

http://www.cplusplus.me/1303.html

查看评论

i++ 与 ++i 的效率哪个更高?

1、http://hi.baidu.com/keeptry/item/851a943815af4049033edc95 2、http://bbs.csdn.net/topics/250027391 ...
  • leepwang
  • leepwang
  • 2013-10-22 23:24:43
  • 1752

i++与++i的效率差别

i++与++i的区别,我就不多说了。今天主要说明一下它们的效率上的差别。如果只是对内建数据类型(如int),两者的差别很小,基本上没有,这个可以从汇编代码上看出来。但是如果对于C++里的类,那++i和...
  • ChiXueZhiHun
  • ChiXueZhiHun
  • 2015-12-08 12:40:16
  • 2448

Java中i++与++i的区别(效率分析)

自增运算符是困扰 C 语言与 Java 语言初学者的一大难点,在我最初学习 C 语言时,一直无法理解 i++ 与 ++i 的区别。几年的语言学习,特别是对 Java 语言的学习,对一些基本知识点有了更...
  • kyyee
  • kyyee
  • 2015-12-24 11:55:38
  • 355

比较 i++ 和 i=i+1的执行效率

i++和 i = i + 1相比较分为两种情况: 1、如果编译器不进行优化,i++ 的效率比后者要高; 2、如果进行了优化,两者最终代码一样,效率没有差别。...
  • BZBXun
  • BZBXun
  • 2016-11-12 23:14:23
  • 201

php之 i++ 和++i性能比较

  • ReadyYes
  • ReadyYes
  • 2016-04-04 02:56:05
  • 1107

【Java】i++与++i的不同,从底层和效率上比较

以前书本、视频和网站上但到i++和++i的区别,都是简单,两句话。 i++,先运算,后赋值 ++i,先赋值,后运算 举个例子:(Java语言) int i = 1; System....
  • yingpaixiaochuan
  • yingpaixiaochuan
  • 2016-10-09 15:56:37
  • 1459

i++和++i哪个效率高

只有在必要时才使用后置操作符 因为前置操作需要做的工作更少,只需要加1后返回加1后的结果即可。而后置操作符则必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。对于int对象和指针,编译...
  • linuxdriverdeveloper
  • linuxdriverdeveloper
  • 2013-04-07 14:51:09
  • 870

++i和i++哪个效率高

(1)自带数据类型,它们的效率差别不大,(去除编译器优化的影响)。(2)在自定义类型中,前缀式(++i)可以返回对象的应用,而后缀表达式(i++)必须返回对象的值,产生了复制的开销,引起效率降低。...
  • hejun_haitao
  • hejun_haitao
  • 2016-10-19 10:15:25
  • 145

C++中i++和++i的区别

答:理论上++i更快,实际与编译器优化有关,通常几乎无差别。  i++实现的代码为: //i++实现代码为: int ope...
  • u014465639
  • u014465639
  • 2017-05-30 22:11:03
  • 1976

for循环中i++与++i的效率探究

for(int i=0;i 我们经常会使用这样的代码来做循环,一般在for循环中习惯于使用i++,却很少使用++i。虽然从代码执行的效果来看,它们并无任何区别,但是它们所生成的代码是有有所不同的。 i...
  • zy1691
  • zy1691
  • 2009-11-21 23:50:00
  • 17255
    个人资料
    持之以恒
    等级:
    访问量: 11万+
    积分: 3417
    排名: 1万+
    最新评论