++i与i++的一点思考
众所周知,++i与i++的功能几乎相同,最终都会达到给i进行递增的效果。两者的主要区别就是, i++ 返回原来的值,++i 返回加1后的值。
通过百度,我找到了实现两者的源码。
++i
int &operator++()
{
*this += 1;
return *this;
}
i++
int operator++(int)
{
int temp = *this;
++*this;
return temp;
}
通过这些我们可以知道 i++返回的是i的值,而++i返回的是i+1的值。也就是++i是一个确定的值,是一个可修改的左值 。并且根据源码来看,++i更效率一点。
但是,我不由得对++i在for语句中的使用生出了疑惑,人们通常在for语句中使用i++而不是++i,那么是否是因为两者返回值的不同而导致的呢?所以我写了一段测试代码。
int main()
{
int i=1;
for(;i<3;++i)
printf(“6\n”);
printf(“\n”);
for(i=1;i<3;i++)
printf(“6\n”);
return 0;
}
如果两个for循环输出同样数量的6,那么++i与i++在for语句中就是同样的作用了。
显而易见,两者作用相同。所以人们经常使用i++是因为i++更符合人们的思维习惯咯。
最终结论:++i与i++在单独使用时效果一样,++i更有效率 。
(但与其他运算符混合使用时需要具体分析。)