是否可以将增量运算符(++)重载增加1以上?

时间:2018-03-27 16:15:45

标签: c++

是否可以将增量运算符(++)重载增加1以上?如果是的话,是不是违反了操作员的运作方式?

3 个答案:

答案 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,或启动俄罗斯方块游戏。当然,当你设计这样一个函数时,你必须考虑它的行为是否会让使用你代码的人感到惊讶。