重载postfix ++运算符

时间:2011-03-11 08:18:57

标签: c++ operator-overloading

overload ++函数必须以int为参数才能将自己与前缀运算符区分开来,这是某种强制规则吗?

另外,在前缀overload ++函数的情况下,右手操作数是如何隐式参数的?

E.g ++ClassObj //ClassObj is rhs, but usualy lhs is made implicit

3 个答案:

答案 0 :(得分:6)

关于第二个问题。前缀和后缀++都是一元运算符,它们没有左侧右侧操作数,但是应用它们的单个操作数。也就是说,在x++++x中,x 操作数,而不是右手/左手,但是 操作数

然后,为什么在后缀版本的签名中需要int,它采用人工整数参数(未使用)只是为了区分签名并允许编译器知道您正在声明/定义 postfix ++而不是前缀版本。将它视为标签,而不是其他任何东西,因为语言需要不同的签名。

答案 1 :(得分:3)

是..它在标准中定义。

来自标准文档 13.5.7增量和减量

  

名为operator ++的用户定义函数实现前缀和后缀++运算符。如果此功能是成员   没有参数的函数,或具有类或枚举类型的一个参数的非成员函数,它定义了   用于该类型对象的前缀增量运算符++。 如果函数是带有一个参数的成员函数(哪个   应该是int类型或具有两个参数的非成员函数(第二个应该是int类型),它   为该类型的对象定义后缀增量运算符++。当作为结果调用后缀增量时   使用++运算符,int参数的值为零。

答案 2 :(得分:3)

C ++需要在函数的签名上有所作为。不幸的是,x++++x只有一个真正的参数,即x。因此,C ++设计者在定义一个hack时选择了一个虚拟的未使用的int参数。这导致了不同的方法签名,因此C ++编译器可以区分前缀和后缀运算符。