C++复习整理---i++和++i

本文探讨了++i和i++这两种运算符的理论与实际性能差异,重点讲解了它们的实现原理、返回值类型和使用场景,通过实例展示了解析过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

理论上++i更快,实际与编译器优化有关,通常几乎无差别。

//i++实现代码为:                                    
int operator++(int)                                  
{
    int temp = *this;                                     
    ++*this;                                             
    return temp;                                    
}//返回一个int型的对象本身
// ++i实现代码为:
int& operator++()
{
    *this += 1;
    return *this;
}//返回一个int型的对象引用

简单从返回的值来说,i++返回的是i的值,而++i返回的是i+1的值。

从返回的东西来说,++i返回的是i的引用,i是什么值反映出来就是什么值。可以不停嵌套++(++i)。而且可以(++i) = 5;,就是把i的值改为5。可以&(++i)取i的地址空间。而i++就不行,就会报错,因为i++相当于只是返回一个值,没有实体,就不能这样做,也不能嵌套。

	int i = 0;
	cout<<++i<<endl<<++i<<endl;	//2 2 
	cout<<++i<<endl<<i++<<endl;	//4 2 
	cout<<i++<<endl<<i++<<endl; //5 4
	cout<<i++<<endl<<++i<<endl;	//7 8

首先是函数的入栈顺序从右向左入栈的,计算顺序也是从右往左计算的,不过都是计算完以后在进行的压栈操作,所以输出是按顺序的,只是计算顺序是反的:

第一行输出:首先执行++i,返回值是i,这时i的值是1,再次执行++i,返回值是i,得到i=2,将i压入栈中,此时i为2,也就是压入2,2;因为++i返回的是引用,所以前一个的i是2.

第二行输出:首先执行i++,返回值是原来的i,也就是2,再执行++i,返回值是i,依次将2,4压入栈中得到输出结果

第三行:首先执行i++,返回值是原来的4,再执行i++返回值是原来的5,依次将4,5压入栈中得到输出结果

第四行:首先执行++i,返回i,此时i为7,再执行i++,返回值是原来的7,此时i为9,依次将i,8也就是9,8压入栈中,得到输出结果。

理解的时候就是++i是把i压入栈,i是什么值就是什么值。i++是把传入时i的值压入栈,是加之前的值,且不会改的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值