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

问题描述 投票:0回答:2

据我所知,这是重载后自增运算符的方法:

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

为什么它有 int 作为参数?

c++ operator-overloading
2个回答
18
投票

D&E,§11.5.3:

我考虑了显而易见的解决方案,将关键字

prefix
postfix
添加到 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
参数用于指示奇数后缀运算符。换句话说,在后缀情况下,
++
位于第一个(实数)操作数和第二个(虚拟)参数之间,因此是后缀。

这些解释是必要的,因为该机制是独特的,因此有点棘手。如果有选择,我可能会引入
prefix
postfix
关键字,但当时这似乎不可行。


3
投票

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

为了完整起见,C++03 和 C++11 标准的第 13.5.7 节中对此进行了规定。

© www.soinside.com 2019 - 2024. All rights reserved.