iterator迭代器前加和后加运行效率

2022-03-20  本文已影响0人  九楼记

《More effective C++》有详细说明

概念

前加:++i
后加:i++

说明

代码实现:

//普通类型
Object& operator++() {
  ++(*this);
  return *this;
}
const Object operator++(int) {
  Object temp = *this;
  ++(*this);
  return temp;
}

这里思考一下,为什么返回值时const类型?

//迭代器类型
iterator & operator++()
{   // 前增
    ++*this;
    return (*this);
}

iterator operator++(int)
{   // 后增
    iterator temp = *this;
    ++*this;
    return (temp);
}

从上述代码,我们可以看出前加++和后加++,有4点不同:

因为前加和后加的函数重载相同,这样就有一个语法问题,函数重载的区别决定于它们的参数类型上的差异,但是都只有一个参数,所以为了解决这个问题,C++规定后加参数增加一个int,当函数调用时,编译器传递一个0作为int参数的值给该函数。

注:我们只要重载++时,只要认清前置++是没有参数的,后置++是有一个int型参数的就行了,实际调用的区分是编译器的事!

reference

[1] https://zhuanlan.zhihu.com/p/42936185
[2] https://www.cnblogs.com/balingybj/p/4736195.html

上一篇下一篇

猜你喜欢

热点阅读