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语言都是不支持的。
原文链接: https://www.cnblogs.com/honernan/p/13804017.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/203887
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!