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

2017-03-30  本文已影响0人  fwei

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


1.语义区别:

2.效率区别:

分析:

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

结论:

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


补充:
* 在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)
上一篇下一篇

猜你喜欢

热点阅读