《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
网友评论