我最近读过: “表达式(++ i)和(i ++)具有值和副作用。 副作用是i中的值增加1。 (i ++)的值是增量前的值 (++ i)的值是增量后的值, 但是增量或评估是否先发生, 不是C的一部分。“
我知道评估步骤首先在Java中进行...对于所有其他语言是否相同?
答案 0 :(得分:2)
至少在C ++中,运算符可能会被重载,因此++i
和i++
的语义无法保证 - 实际上它们可能会被重载以执行非常不同的操作,甚至可以使用做一些与增量无关的事情。所以你的问题的答案是,没有 - 至少在一种语言中,类的后缀和前缀++
运算符可以做任何程序员所希望的。
但仅仅因为某人可以做到这一点,并不意味着他们应该这样做。由于前增量和后增量运算符具有非常着名的语义,(体面的)C ++程序员试图不违反它,以免使用它们的代码最令人惊讶。
C ++中运算符重载的一个很好的例子是STL迭代器。像链接列表这样的容器的迭代器定义了一个类,它以一种模仿指针的方式重载preincrement和postincrement操作符(C ++中的迭代器实际上是指针的泛化)。