【问题标题】:Overloading post increment operator results in argument valued at 0 [duplicate]重载后增量运算符导致参数值为 0 [重复]
【发布时间】:2011-05-23 19:38:44
【问题描述】:

可能重复:
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?

【问题讨论】:

  • 一天有两个问题,真的很有趣。
  • @Space_C0wb0y:实际上是重复的。
  • @Space_C0wb0y:太搞笑了!一些工作中的聪明人直接使用运算符来证明一个观点,所以现在我试图通过让代码处理它来证明一个。
  • 我想知道他是不是看到了这个问题并决定搞笑。

标签: c++ post-increment


【解决方案1】:

你应该忽略这个参数。

【讨论】:

  • 那么,a.operator++(10); 在技术上不是一个有效的做法,即使它有效?
  • 这样做是完全有效的,但在任何合理的实现中它都没有效果。没有人应该编写依赖于这种行为的代码。这是自找麻烦。
  • 我同意。感谢您的洞察力。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2010-10-14
    • 2010-12-29
    • 1970-01-01
    • 2016-02-02
    • 2017-06-30
    • 2012-04-13
    • 2011-03-17
    • 1970-01-01
    相关资源
    最近更新 更多