使用++i还是i++

我们经常使用 for 循环来遍历东西,循环变量可以前自增也可以后自增,发现对遍历结果没啥影响,但是该如何选择呢?我们应该尽量使用前自增运算符而不是后自增运算符,即用 ++Iter 代替 Iter++。前缀和后缀形式之间的区别是众所周知的。我希望它们内部结构的区别,大家也是清楚的。如果你有使用过运算符重载的话,肯定已经意识到了。没有用过的话,我在这儿简单地解释一下用过运算符重载的可以跳过下面关于运算符重载的例子。前自增运算符改变了对象的状态并返回对象改变后的状态,不需要创建临时对象。下面是前自增运算符的例子:

MyOwnClass& operator++()
{
  ++meOwnField;
  return (*this);
}

后自增运算符也改变了对象的状态但是返回的是对象改变前的状态,并且需要创建一个临时对象。下面是后自增运算符重载的例子:

MyOwnClass operator++(int)
{
  MyOwnClass tmp = *this;
  ++(*this);
  return tmp;
}

看到上面这段代码,你会发现有一个额外的操作,就是要创建一个临时对象,在实践中这点太重要了!现在的编译器做代码优化的时候非常智能,如果没有用处,是不会随便创建临时对象的。这就是为什么在发布版中我们很难发现 i++++i 的区别。不管咋样,请用 ++Iter 代替 Iter++,这是一个好的代码习惯。


   转载规则


《使用++i还是i++》 吴杭沉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
C++成员修饰const和mutable C++成员修饰const和mutable
const:常量,不变的 mutable:易变的从意思上理解,可见 const 和 mutable 是一对反义词,它们都是 C++的关键字。const 成员函数不能修改调用它的对象。类的成员函数可以被声明为 const,这将使得函数的隐式参
2018-08-07
下一篇 
C++面试题 C++面试题
1.char c = '\72'; 中的 \72 代表一个字符,72 是八进制数,代表 ASCII 码字符 :。2.10*a++ 中 a 先进行乘法运算再自增。3.const 和 static 的作用 static 关键字:
2018-08-01
  目录