使用++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,这将使得函数的隐式参数this将被作
2024-09-28
下一篇 
C++面试题 C++面试题
1.char c = '\72'; 中的\72代表一个字符,72是八进制数,代表ASCII码字符:。2.10*a++中a先进行乘法运算再自增。3.const和static的作用static关键字:1)函数体内static变量
2024-09-23
  目录