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

Ash*_*sha 26 c++ operator-overloading

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

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


int main()
{   
    A a;
    a++;
    a.operator ++(10);
}
Run Code Online (Sandbox Code Playgroud)

在VS2008上,我得到输出为:

N是0

第一次通话和

N是10

第二次通话

Bjö*_*lex 20

这种行为是合法的,在13.5.7中定义明确:

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


Pra*_*rav 11

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

13.5/7

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


Alo*_*ave 8

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