关于 前++ 和 后++ 的效率问题

  我在写这篇博客之前也是被一些文章所误导,认为 ++i 的效率比 i++ 的效率高,每次都是使用前置的 ++。虽然操作没错,但是在认识上有错误,所以我把自己错误认识的经历分享出来,希望能够对和我有同样错误的人一些帮助。

一、内置数据类型

  对于计算机内置的数据类型,现在的编译器水平比较高,比如 ++ii++ 没有任何的区别,我们可以通过查看汇编代码看出来。

  • C语言源代码如下:
    i++;   // 后置的++
    ++i;   // 前置的++
    i = i + 1;
    
  • 汇编代码如下:
    0x401366	addl   $0x1,0xc(%esp)   // i++;
    0x40136b	addl   $0x1,0xc(%esp)   // ++i;
    0x401370	addl   $0x1,0xc(%esp)   // i = i + 1;
    

  通过观察编译的结果,我们发现这三条语句的汇编代码没有任何的差异,但是我用的编译器是 Code::blocks,你也可以试用其他的编译器,比如Visual Studio Code 或者 VC++ 都可以,应该都是一样的。

二、自定义数据类型

  对于自定义数据类型,前 ++ 要高于后 ++ 。简单的说,在 C++ 中 i++ 在实现的时候会生产一个类对象,例如:

  • i++ :
    INT INT::operator++()
    {
    	*this = *this + 1;
    	return *this;
    }
    
  • ++i :
    INT INT::operator++()
    {
    	INT val = *this;   // 此时会产生一个类对象
    	*this = *this + 1;
    	return val;
    }
    

  如果有错误的地方也请各位朋友在评论区指出,我们互相学习。

猜你喜欢

转载自blog.csdn.net/weixin_42795141/article/details/89331430