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来学习,这两者没有什么区别。