我试图通过示例说明前缀递增比后缀递增更有效率。
从理论上讲,这是有道理的:i++需要能够返回未递增的原始值并因此存储它,而++i可以返回递增后的值而无需存储先前的值。
但是有没有一个好的实例来展示这一点呢?
我尝试了以下代码:
int array[100];
int main()
{
for(int i = 0; i < sizeof(array)/sizeof(*array); i++)
array[i] = 1;
}
我使用gcc 4.4.0编译它的方式如下:
gcc -Wa,-adhls -O0 myfile.cpp
我再次尝试了一下,将后缀递增改为前缀递增:
for(int i = 0; i < sizeof(array)/sizeof(*array); ++i)
在这两种情况下,结果的汇编代码是完全相同的。
这有点出乎意料。似乎通过关闭优化(使用-O0)应该会有不同的结果来展示这个概念。我错过了什么?是否有更好的例子来说明这一点?
array
存储在其元素中的类型,如果你使用sizeof(int)
而不是sizeof(*array)
,那么你很可能会遇到错误,因为你很可能会忘记在那个地方也进行更改。代码是不断变化的,因此始终要尽可能地使其易于更改,这通常意味着减少需要更改代码的位置的数量,特别是如果那些位置即使你不更改它们也会编译通过(就像在这种情况下一样)。 - HelloGoodbye