为什么使用int作为后增量运算符重载的参数?

时间:2012-10-05 06:01:29

标签: c++ operator-overloading

我知道这是重载后增量运算符的方法:

const MyClass& MyClass::operator++(int);

为什么将int作为参数?

2 个答案:

答案 0 :(得分:6)

D&E,§11.5.3:

  

我采用了明显的解决方案,将关键字prefixpostfix添加到C ++ [...]    然而,我收到了那些不喜欢新关键词的人的愤怒。提出了几个不涉及新关键词的替代方案。例如:

class Ptr_to_X {
    X ++operator(); // prefix ++
    X operator++(); // postfix ++
};
  

class Ptr_to_X {
    X& operator++(); // postfix because it 
                     // returns a reference
    x operator();    // prefix because it
                     // doesn't return a reference
};
  

我认为前者太可爱而后者太微妙了。最后我决定:

class Ptr_to_X {
    X operator++();     // prefix: no argument
    X operator++(int);  // postfix: because of the argument
};
  

这可能太可爱而且太微妙,但它有效,不需要新的语法,并且具有疯狂的逻辑。其他一元运算符是前缀,在定义为成员函数时不带参数。 “奇数”和未使用的伪int参数用于指示奇数后缀运算符。换句话说,在后缀的情况下,++位于第一个(实际)操作数和第二个(虚拟)参数之间,因此是后缀。

     

这些解释是必要的,因为机制是独特的,因此有点疣。如果有选择,我可能会引入prefixpostfix个关键字,但那时似乎不可行。

答案 1 :(得分:3)

这是为了区分前缀增量和后缀增量运算符。

为了完整性,这在C ++ 03和C ++ 11标准中都在§13.5.7中列出。