重载后缀 ++操作员

发布于 2024-10-21 13:30:01 字数 187 浏览 1 评论 0原文

是否存在某种强制规则:overload ++ 函数必须采用 int 作为参数以将其自身与前缀运算符区分开来?

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

例如 ++ClassObj //ClassObj 是 rhs,但通常 lhs 是隐式的

Is it some kind of enforced rule that the overload ++ function must take an int as argument to distinguish itself from prefix operators?

Also, In case of prefix overload ++ function, how does the right hand operand is implicit argument?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一人独醉 2024-10-28 13:30:01

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

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

On the second issue. Both prefix and postfix ++ are unary operators, they do not have a left-hand-side and right-hand-side operand, but a single operand on which they are applied. That is, in x++ and ++x, x is the operand, not the right hand/left hand, but the operand.

Then on why the int that is required in the signature of the postfix version, it takes an artificial integer argument (which is not used) just to differentiate the signatures and allow the compiler to know that you are declaring/defining a postfix ++ and not the prefix version of it. Consider it as a tag, more than anything else, since the language requires different signatures.

牛↙奶布丁 2024-10-28 13:30:01

是的..它是在标准中定义的。

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

名为operator++的用户定义函数实现了前缀和后缀++运算符。如果这个函数是成员函数
不带参数的函数,或者带一个类或枚举类型参数的非成员函数,它定义
该类型对象的前缀增量运算符 ++。 如果该函数是具有一个参数的成员函数(其中
应为 int 类型)或具有两个参数的非成员函数(其中第二个参数应为 int 类型),它
为该类型的对象定义后缀增量运算符 ++。
当由于以下原因调用后缀增量时
使用 ++ 运算符,int 参数的值将为零。

Yes.. It is defined in the standard.

From standard docs 13.5.7 Increment and decrement,

The user-defined function called operator++ implements the prefix and postfix ++ operator. If this function is a member
function with no parameters, or a non-member function with one parameter of class or enumeration type, it defines the
prefix increment operator ++ for objects of that type. If the function is a member function with one parameter (which
shall be of type int) or a non-member function with two parameters (the second of which shall be of type int), it
defines the postfix increment operator ++ for objects of that type.
When the postfix increment is called as a result of
using the ++ operator, the int argument will have value zero.

月寒剑心 2024-10-28 13:30:01

C++ 需要对函数的签名进行修改。不幸的是,x++++x 都只有一个实参,即 x。因此,C++ 设计者选择了一种hack 来定义一个需要一个未使用的虚拟 int 参数的方法。这会产生不同的方法签名,从而为 C++ 编译器提供了一种区分前缀和后缀运算符的方法。

C++ needs to make a difference in the signature of the function. Unfortunately, both x++ and ++x have only one real argument, namely x. So the C++ designers chose a kind of hack in defining one to require a dummy unused int parameter. That results in different method signatures, and thus a way for the C++ compiler to distinguish the prefix from the postfix operator.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文