[英]Overloading postfix ++ operator
是否有某种强制规则, overload ++
函数必须将int
作为参数来区分自己与前缀运算符?
另外,在前缀overload ++
函数的情况下,右手操作数是如何隐式参数的?
例如++ClassObj //ClassObj is rhs, but usualy lhs is made implicit
关于第二个问题。 前缀和后缀++
都是一元运算符,它们没有左侧和右侧操作数,而是应用它们的单个操作数。 也就是说,在x++
和++x
, x
是操作数,而不是右手/左手,但操作数。
然后,为什么在后缀版本的签名中需要的int
,它需要一个人工整数参数(未使用)只是为了区分签名并允许编译器知道您正在声明/定义后缀 ++
和不是它的前缀版本。 将它视为标记,最重要的是,因为语言需要不同的签名。
是..它在标准中定义。
从标准文件13.5.7增量和减量 ,
用户定义的函数operator ++实现了前缀和后缀++运算符。 如果此函数是没有参数的成员函数,或者是具有类或枚举类型的一个参数的非成员函数,则它为该类型的对象定义前缀增量运算符++。 如果函数是具有一个参数(其类型为int)的成员函数或具有两个参数的非成员函数(其中第二个应为int类型),则它为对象定义后缀增量运算符++那种类型。 当使用++运算符调用后缀增量时,int参数的值为零。
C ++需要在函数的签名上有所作为。 不幸的是, x++
和++x
都只有一个真正的参数,即x
。 因此,C ++设计人员在定义一个需要虚拟的未使用的int参数时选择了一种hack
。 这导致不同的方法签名,因此是C ++编译器区分前缀和后缀运算符的一种方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.