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

Nay*_*iya 3 c++ operator-overloading

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

const MyClass& MyClass::operator++(int);
Run Code Online (Sandbox Code Playgroud)

为什么它有int作为参数?

Jer*_*fin 6

D&E,§11.5.3:

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

class Ptr_to_X {
    X ++operator(); // prefix ++
    X operator++(); // postfix ++
};
Run Code Online (Sandbox Code Playgroud)

要么

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

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

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

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

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

  • @NayanaAdassuriya:简单:写"x ++",这就是被调用的函数.如果你坚持把它称为`x.operator ++`,那么我相信你必须传递一个参数(将被忽略):`x.operator ++(1);` (3认同)