我没有在任何生产环境中使用此代码,这只是为了我的理解。这段代码是否有效(即我可以像这样定义我的后缀运算符吗?):
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
进行第二次通话
答案 0 :(得分:20)
此行为是合法的,并在13.5.7中明确定义:
显式调用operator ++,如 像a.operator ++(2)这样的表达式 没有特殊属性:参数 operator ++是2。
答案 1 :(得分:11)
a++
相当于a.operator++(0);
。您的代码有效
13.5 / 7
当使用++运算符调用后缀增量时,int 参数的值为零。
答案 2 :(得分:8)
是的,它作为参数有效,它只是一个策略实施参数来区分前缀和后缀运算符。传递的参数将作为参数接收,这是您看到的行为&amp;它是完美定义的行为。