是否允许在后缀运算符++中命名参数?

时间:2011-05-23 08:35:02

标签: c++ operator-overloading

我没有在任何生产环境中使用此代码,这只是为了我的理解。这段代码是否有效(即我可以像这样定义我的后缀运算符吗?):

class A
{
public:
    A& operator++(int n)
    {
        std::cout<<"N is:"<<n<<"\n";
        return *this;
    }
};


int main()
{   
    A a;
    a++;
    a.operator ++(10);
}

在VS2008上,我得到输出:

  

N是0

第一次通话和

  

N是10

进行第二次通话

3 个答案:

答案 0 :(得分:20)

此行为是合法的,并在13.5.7中明确定义:

  

显式调用operator ++,如   像a.operator ++(2)这样的表达式   没有特殊属性:参数   operator ++是2。

答案 1 :(得分:11)

a++相当于a.operator++(0);。您的代码有效

13.5 / 7

  

当使用++运算符调用后缀增量时,int     参数的值为零。

答案 2 :(得分:8)

是的,它作为参数有效,它只是一个策略实施参数来区分前缀和后缀运算符。传递的参数将作为参数接收,这是您看到的行为&amp;它是完美定义的行为。