++i效率高于i++?

132 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

你是否有这样的疑惑:为什么很多大佬在写循环的时候喜欢写++i而不是小白习惯上的i++? 这篇博客将带领你们探索其中的关键原因。

简介

我们知道,前置++为先将变量值加一,再使用,如:

int a=0,b;
b=++a;
printf("a=%d b=%d",a,b);

得到的结果为a=1 b=1 而后置++为先使用变量的值,再将变量加1,如:

int a=0,b;
b=a++;
printf("a=%d b=%d",a,b);

得到的结果为a=1 b=0

但事实上,i++和++i还有一个区别,那就是效率上的问题。

效率区分

相对官方的解释是这样的:

//来源:公众号【编程珠玑】地址:https://www.yanbinghu.com
class Test
{
public:
    Test& operator++();//前置自增
    const Test operator++(int);//后置自增
private:
    int curPos; //当前位置
};
/*前置自增实现范式*/
Test& Test::operator++()
{
    ++curPos;      //自增
    return *this;  //取值
}
/*后置自增实现范式,为了与前置区分开,多了一个int参数,但从来没用过*/
const Test Test::operator++(int)
{
    Test tmp = *this;  //取值
    ++curPos;             //自增
    return tmp;
}

基于以上i++是先取值后++,++i是++后取值,那么简化一下就是: ++i相当于下列代码

i += 1;
return i;

i++相当于下列代码

j = i;
i += 1;
return j;

可以看出,执行语句的数量上,++i少了一句,也就是存储i原先的值的这一句:j = i;

通过这样简单的介绍,相信大家已经对二者的效率区别有了一定的认识,如有疑问,欢迎评论区留言哦;

==//博主定期更新C语言相关知识供小白们提高自己的能力,欢迎关注哦。==