美文网首页
【C++杂记】 i++与++i 的效率问题

【C++杂记】 i++与++i 的效率问题

作者: fwei | 来源:发表于2017-03-30 14:23 被阅读0次

    今天参加面试的时候被问到了一个问题 “++i和i++在效率上有没有什么区别”,想了想除了语义上的区别,觉得应该没有别的区别呀,回来google下发现自己果然too young。


    1.语义区别:

    • i++ :将i加1,求值结果是i+1之前的i的一个副本

    • ++i : 先执行i=i+1,然后返回求值后i的值

    2.效率区别:
    • 若i是内置的数值类型,两者完全一样
    • 若i是一些自定义的类,++i的效率 > = i++的效率

    分析:

    递增(++)和递减(--)运算符都有前置和后置版本,这两种版本都必须需作用于左值运算对象,其中前置版本将对象作为左值返回,而后置版本则把对象原始值的副本作为右值返回,因此前置可以返回对象的引用,而后置则不可以,这导致对大的对象使用后置时,会造成额外的复制开销。

    结论:

    除非必要情况,否则最好使用递增递减运算符的前置版本。


    补充:
    * 在C++中,对前置和后置自增、自减运算符的的重载的实现:

    operator++的前缀和后缀形式在语义上完全不同,因此需要为为每种形式分别编写例程。由于他们具有相同的名字,因此需要用不同的特征进行区分,
    C++规定,前缀形式指定空参数列表,后缀形式指定(匿名的)单参数int,从而区分它们。

    List类的一个实现的例子(p73):
    iterator & operator++ ( ) {
      this->current = this->current->next;
      return *this;
    }
    iterator & operator++ (int) {
      iterator old = *this;
      ++(*this);
      return old;
    }
    
    

    参考:

    1. i++与++i哪个效率更高
    2. 在程序开发中,++i 与 i++的区别在哪里?
    3. 《数据结构与算法分析 C++语言描述》(Mark Allen Weiss)

    相关文章

      网友评论

          本文标题:【C++杂记】 i++与++i 的效率问题

          本文链接:https://www.haomeiwen.com/subject/huauottx.html