1

我最近读到:“表达式 (++i) 和 (i++) 有值和副作用。副作用是 i 中的值增加 1。(i++) 的值是递增前的值和(++i) 的值是增量之后的值,但无论是先进行增量还是求值,都不是 C 的一部分。”

我知道评估步骤首先在 Java 中进行……所有其他语言都一样吗?

4

1 回答 1

2

至少在 C++ 中,操作符可以被重载,因此 和 的语义++ii++不能得到保证——它们实际上可以被重载来做非常不同的事情,甚至可以做一些与增量无关的事情。所以你的问题的答案是不 - 在至少一种语言中,++类的后缀和前缀运算符可以做程序员想要的任何事情。

但仅仅因为有人可以做到这一点,并不意味着他们应该这样做。由于前自增和后自增运算符具有众所周知的语义,(体面的)C++ 程序员尽量不违反这一点,以免使用它们的代码感到最惊讶。

C++ 中运算符重载的一个很好的例子是 STL 迭代器。像链表这样的容器的迭代器定义了一个类,该类以模仿指针的方式重载前增量和后增量运算符(C++ 中的迭代器实际上是指针的泛化)。

于 2010-09-07T04:54:47.623 回答