重载post增量运算符导致参数值为0

时间:2011-05-23 19:38:44

标签: c++ post-increment

  

可能重复:
  Is it allowed to name the parameter in postfix operator ++?

我创建了一个对象来保存一个在内部维护当前位置的对象列表,所以我认为这是重载前后增量运算符的好地方,它通过边界检查有效地增加了这个内部位置。

我注意到,当您在对象上调用++时,参数为0

测试代码:

#include <stdio.h>
class A {
public:
   A& operator++(int n) { printf("%d  ", n); return *this; }
};
int main() {
   A a;
   a++;
   a.operator++(0);
   a.operator++(1);
   a.operator++(10);
   return 0;
}

返回0 0 1 10。据我所知,这是正常行为。所以,它让我重新思考operator++应该如何运作。以前,如果边界检查通过,我只是在我的内部位置变量上调用++。但无论输入参数是什么,这都会增加1的影响。接下来,我使用+=使用参数n作为右侧,但正如您将注意到的那样,只需在没有运算符的情况下调用++(按惯例),零,位置递增。

基本上,这是我应该担心的吗?如果是这样,我如何检测用户是否真的想要0,或者是否有默认行为(a++)并且我应该增加1?

2 个答案:

答案 0 :(得分:0)

编译器将运算符中的int放在那里或不放在那里。它指示您是否具有前缀或后缀运算符。 (++ a a ++)

答案 1 :(得分:0)

你应该忽略参数。