c++ - 重载后缀和前缀运算符

标签 c++ syntax language-lawyer postfix-operator prefix-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;
    }

这里实现了两个版本的后缀和前缀运算符,我已经读到不同之处在于引入了另一个所谓的伪参数,但我怀疑我们是否看到了这些声明

Digit& operator++();//prefix
             Digit& operator--();   //prefix
        Digit operator++(int);
        Digit operator--(int);

它们的区别在于 & 标记,那么为什么需要伪参数?而且在这两种情况下,例如++ 运算符都写在参数之前,这是否意味着它们相同?

最佳答案

前增量和后增量是两个不同的运算符,需要单独的重载。

C++ 不允许只对返回类型进行重载,因此在您的示例中使用不同的返回类型不足以消除这两种方法的歧义。

伪参数是C++设计者选择的消歧机制。

关于c++ - 重载后缀和前缀运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7740350/

相关文章:

C++编程,迭代器是一个指针,即使它没有被声明为指针

syntax - 正确的 InstallUtil 文件语法路径?

C++模板语法错误

C++ 模板类型规范

c++ - 程序退出期间的函数局部静态初始化

c++ - 将项目添加到列表框的按钮出错

c++ - 如何将 DLL 链接到我的项目?错误 LNK2019 : unresolved external symbol

sql - 是否可以在 SQLite 数据库中一次插入多行?

c++ - 显式调用模板参数类型的析构函数,即使在内置函数上实例化时也是如此

c++ - 使用 'pointer' 和结构调用 DLL (C++ -> VB.NET)