每日一问4: ++i和i++的区别
C++中区别
i++和++i很明显的区别就是:++i是先对i进行加一操作然后再返回i的值,而i++是先返回i的值再对i进行加一操作。
int main() { int i = 1, j = 1; cout << "i++:" << i++ << endl; cout << "++j:" << ++j << endl; return 0; }
执行结果如下:
然后我再从C++的角度将一下这两者的区别,首先我们来看看这两者的底层实现:
//++i Typename operator ++() { (*this) = (*this) + 1; return *this; } //i++ Typename operator ++(int) { A t = *this; ++(*this); return t; }
int fun(int& i) { cout << i << endl; } int main() { int i = 1, j = 1; fun(i++); //正确 fun(++i); //错误,非常量引用的初始值必须为左值 return 0; }
此外,在for循环中,使用i++和++i虽然效果是一样的,但是两者的效率是有区别的。从前面的底层实现我们可以看到,i++需要生成一个临时变量,而++i不需要,所以在大多数情况下,for循环中推荐使用++i。
i--和--i可以类比i++和++i来学习,这两者没有什么区别。
C中区别
C语言中,i++和++i都是复制一份变量值得拷贝,这些操作符的结果不是被修改的变量,而是变量值的拷贝。这一点和C++中区别很大,以下面的代码为例:
#include<stdio.h> int main(){ int a = 1; ++a = 10; return 0; }
在C语言中,上述的代码是不合法的,因为++a返回的是a的拷贝,是一个临时变量,不能对其赋值,但在C++中,这一句代码就是合法的。对于a++ = 4这类型表达式,C++和C语言都是不支持的。