繁体   English   中英

重载postfix ++运算符

[英]Overloading postfix ++ operator

是否有某种强制规则, overload ++函数必须将int作为参数来区分自己与前缀运算符?

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

例如++ClassObj //ClassObj is rhs, but usualy lhs is made implicit

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

然后,为什么在后缀版本的签名中需要的int ,它需要一个人工整数参数(未使用)只是为了区分签名并允许编译器知道您正在声明/定义后缀 ++和不是它的前缀版本。 将它视为标记,最重要的是,因为语言需要不同的签名。

是..它在标准中定义。

从标准文件13.5.7增量和减量

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM