据我所知,这是重载后自增运算符的方法:
const MyClass& MyClass::operator++(int);
为什么它有 int 作为参数?
D&E,§11.5.3:
我考虑了显而易见的解决方案,将关键字
和prefix
添加到 C++ [ ... ] 然而,我收到了那些不喜欢新关键词的人通常的愤怒怒吼。建议了几种不涉及新关键字的替代方案。例如:postfix
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
这是为了区分前缀增量和后缀增量运算符。
为了完整起见,C++03 和 C++11 标准的第 13.5.7 节中对此进行了规定。