是否可以将增量运算符(++)重载增加1以上?如果是的话,是不是违反了操作员的运作方式?
答案 0 :(得分:8)
对于自定义类型:是的,你可以。
不违反操作员的运作方式
如果您的类型为数字建模,那么绝对是。这就是为什么这通常是一个非常糟糕的主意。但是,++
更一般地意味着“转到下一个逻辑元素”。对于数字类型,这确实比当前值多1倍。
但是运算符通用于序列,它可以具有其他属性。在Jesper给出的示例if your type represents the sequence of the Fibonacci numbers中,然后++
应该将序列前进到下一个Fibonacci数(对于其他序列也是如此)。
顺便提一下,C ++确实有一个“按 n 增量”运算符:+=
。
答案 1 :(得分:1)
在某种意义上,指针算法已经做到了这一点。它增加sizeof(*ptr)
个字节。当然,那就是你移动到下一个对象,所以它在逻辑上是一个增量。
这是C ++中的常见主题。重载应该在逻辑上正确;必须遵循内部细节。对于链表,operator++
应该移动到列表中的下一个元素,而不是内存中的下一个元素。在内部,通常会转换为ptr = ptr->next
而不是ptr = ptr+1
。
答案 2 :(得分:0)
对于用户定义的类型,重载增量运算符仅意味着您已经提供了可以使用++
调用的函数。也就是说,它只是一种语法上的便利;它不会对该函数的作用施加任何限制。所以,是的,你可以把它写成增量不止一个。您也可以将它写为始终返回42,或启动俄罗斯方块游戏。当然,当你设计这样一个函数时,你必须考虑它的行为是否会让使用你代码的人感到惊讶。