2010-09-07 48 views
1

我最近阅读: “表达式(++ i)和(i ++)具有值和副作用 副作用是i中的值增加了1 (i ++)的值是值在增量和(++ i)的值是增量之后的值之前,但是增量还是评估先发生,则 不是C的一部分。“++ i与i ++的实现是否因语言而异?

我知道评估步骤首先发生在Java中...对于所有其他语言它是否一样?

回答

2

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

但只是因为有人能做到这一点,并不代表他们应该这样做。由于前后增量运算符具有众所周知的语义,(体面的)C++程序员试图不违反它,以免使用它们的代码会感到惊讶。

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

+0

很酷。谢谢你的深思熟虑的回复!除了超载,我想知道是否有(计算)不同的实现。 – sova 2010-09-07 05:55:13

+0

@sova:可能不是。 “++”运算符被类似C,C++,Java,C#等类似C的语言称为“着名”,意思是“递增这个变量”,并带有众所周知的副作用。 – 2010-09-07 06:04:22