请考虑以下代码
#include <iostream>
using namespace std;
class Digit
{
private:
int m_digit;
public:
Digit(int ndigit=0){
m_digit=ndigit;
}
Digit& operator++();//prefix
Digit& operator--(); //prefix
Digit operator++(int);
Digit operator--(int);
int get() const { return m_digit;}
};
Digit& Digit::operator++(){
++m_digit;
return *this;
}
Digit& Digit::operator--(){
--m_digit;
return *this;
}
Digit Digit::operator++(int){
Digit cresult(m_digit);
++(*this);
return cresult;
}
Digit Digit::operator--(int){
Digit cresult(m_digit);
--(*this);
return cresult;
}
int main(){
Digit cDigit(5);
++cDigit;
cDigit++;
cout<<cDigit.get()<<endl;
cout<<cDigit.get()<<endl;
return 0;
}
这里实现了两个版本的后缀和前缀运算符,我已经读到不同之处在于引入了另一个所谓的伪参数,但我怀疑我们是否看到了这些声明
Digit& operator++();//prefix
Digit& operator--(); //prefix
Digit operator++(int);
Digit operator--(int);
它们的区别在于 & 标记,那么为什么需要伪参数?而且在这两种情况下,例如++ 运算符都写在参数之前,这是否意味着它们相同?
最佳答案
前增量和后增量是两个不同的运算符,需要单独的重载。
C++ 不允许只对返回类型进行重载,因此在您的示例中使用不同的返回类型不足以消除这两种方法的歧义。
伪参数是C++设计者选择的消歧机制。
关于c++ - 重载后缀和前缀运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7740350/