< p >为什么?
在++i中,对象首先被递增,随后可以作为const引用传递给任何其他函数。如果表达式是foo(i++),这是不可能的,因为现在需要在调用foo()之前完成增量,但旧的值需要传递给foo()。因此,编译器被迫在对原i执行自增操作符之前创建一个i的副本。额外的构造函数/析构函数调用是不好的部分
在for(i=0; i<n; i++)的情况下,i++在它自己的表达式中是单独的:在i++之前有一个序列点,在它之后有一个。因此唯一生成的机器代码是“用__abc4增加i”;它很好地定义了这是如何与程序的其他部分进行排序的。因此,如果你将它更改为前缀++,这一点也不重要,你仍然会得到机器代码“increase i by __abc4”。