今天刷题偶然遇到关于比较i++和++i执行效率的问题,于是我重新了解了一下关于他们两的区别。
1)赋值顺序不同,这个大家应该都知道。++i 是先自加再赋值,i++ 是先赋值再自加。
在执行 a = i++ 时,先把i的值给a,i再加一,所以 a = 1 ,i = 2 ;
在执行 b = ++i 时,先进行i自加1,后给b值,所以b = 3 ,i = 3;
2) ++i 的效率比 i++ 高
i++ 在计算时,会用到中间变量存储,会占用更多的内存和时间。所以 ++i 的效率会比 i++ 高。查阅了相关资料后,发现其实对于C++内置类型,两者差别其实不大,但是从重载运算符来看自定义类型,引用一下大佬代码:
Operator Operator::operator++()
{
++value; //内部成员变量
return *this;
}
Operator Operator::operator++(int)
{
Operator temp;
temp.value=value;
value++;
return temp;
}
我们可以发现后置++比前置++多了一个保存临时对象的操作,我们可以这样理解 a = i++,多做了一步将i的值保存了一份先给a,再对i进行++。
3)i++ 不能作为左值,但是 ++i 可以。
一般来说,左值是可以放到赋值符号左边的变量。
看,i++ = 1; 报错说表达式必须是可修改的左值,我们再联系上面的第二点,我认为是 i++ 返回的是一个临时变量,临时变量认为是被const修饰的,所以 i++ 不能作为左值。
参考文章: