dat*_*ili 6 c++ syntax language-lawyer prefix-operator postfix-operator
请考虑以下代码
#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;
}
Run Code Online (Sandbox Code Playgroud)
这里实现了两个版本的后缀和前缀运算符,我已经读过,通过引入另一个所谓的伪参数来做出差异,但我有疑问,如果我们看到这些的声明
Digit& operator++();//prefix
Digit& operator--(); //prefix
Digit operator++(int);
Digit operator--(int);
Run Code Online (Sandbox Code Playgroud)
它们与&mark不同,那么为什么它是必要的伪参数?并且在两种情况下例如++运算符都是在参数之前写的而不是它意味着它们是相同的?
NPE*_*NPE 10
前后增量是两个不同的运算符,需要单独的重载.
C++不允许仅在返回类型上进行重载,因此在示例中使用不同的返回类型将不足以消除这两种方法的歧义.
伪参数是C++设计者为消除歧义选择的机制.
在预自增/自减和后自增/自减中,差异仅基于重载函数中的虚拟参数
operator++() => Prefix Increment
operator--() => Prefix Decrement
operator++(int) => Postfix Increment
operator--(int) => Postfix Decrement
Run Code Online (Sandbox Code Playgroud)
返回类型可能相同。您还可以参考:http ://www.tutorialspoint.com/cplusplus/increment_decrement_operators_overloading.htm