后缀运算符中的参数是否允许命名为++?
我没有在任何生产环境中使用此代码,这只是为了我的理解。这段代码是否有效(即我可以像这样定义我的后缀运算符吗?):
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
第二次调用时
I am not using this code in any production environment, it is just for my understanding. Is this code valid (i.e. can I define my postfix operator like this?):
class A
{
public:
A& operator++(int n)
{
std::cout<<"N is:"<<n<<"\n";
return *this;
}
};
int main()
{
A a;
a++;
a.operator ++(10);
}
On VS2008, I get the output as:
N is 0
for first call and
N is 10
for second call
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这种行为是合法的,并且在 13.5.7 中有明确定义:
This behavior is legal and well defined in 13.5.7:
a++
相当于a.operator++(0);
。您的代码有效期为13.5/7
a++
is equivalent toa.operator++(0);
. Your code is valid13.5/7
是的,int 作为参数是有效的,它只是一个区分前缀和后缀运算符的策略执行参数。传递的参数将作为参数被接收,这是您看到的行为&这是完全定义的行为。
Yes, it is valid the int as a parameter it only a policy enforcing parameter to distinguish between prefix and postfix operators. The passed parameter will be received as an argument, which is the behavior you see & it is prfectly defined behavior.