对运算符++进行重载,前置和后置区分的原理

 #include <iostream>
 using namespace std;
 struct Date
 {
    void  operator++()
    {
      cout << "oprator++()" <<endl;
    }
    void  operator++(int) 
    {
      cout << "oprator++(int)" <<endl;
    }
};
int main()
{
    Date  date;
    ++date;  
    date++;
}

为什么++date对应的是++(),而不是++(int)
然后为什么++(int)里面只能是int,试了float和Date都不行,我明明是用的Date对象进行的++操作啊

阅读 4.4k
3 个回答

由于++操作符本身无论前置或者后置都不接受任何参数,所以如果不做干预的话,无论前置还是后置的声明都是一样的。

void operator++();

这样子肯定不行啊,前置和后置的操作符重载应该区分开。
所以C++规定后置的操作符重载接受一个int作为参数(但是没有用):

void operator++(int);

这样子就可以区分开两个重载了。
不用问这个为什么是int,别的都不行,因为就是这么规定的。

操作符重载就然是通过类的方法定义的,使用的方式也就跟类的方法一样:函数名,参数数量,参数类型要一致。

void operator++(int){}//接受一个int参数,未返回值。
···
所以必须是一个int

这是规定了编译器以一种何种方式区分而已,并没有什么逻辑,just a rule.
如果是我定义这条规则,我大概会以下面的方式区分:
void operator front++();
void operator back++();

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题