C++之前置操作符与后置操作符

前置操作符与后置操作符

思考:

i ++;    // i的值作为返回值,i自增1;
++1;// i自增1,i的值作为返回值;

意想不到的事实

1、现代的编译器产品会对代码进行优化;
2、优化使得最终的二进制程序更加高效;
3、优化后的二进制程序丢失了C/C++的原生语义;
4、不可能从编译后的二进制程序还原C/C++程序; 

++操作符可以被重载

1、全局函数和成员函数均可进行重载;
2、重载前置++操作符不需要额外的参数;
3、重载后置++操作符需要一个int类型的占位参数。

实例分析:

#include <iostream>
#include <string>
#include <sstream>


using namespace std;

class Test
{
	int m_value;
public:
	Test(int i)
	{
		m_value = i;
	}
	int getValue()
	{
		return m_value;
	}
	//前置++重载
	Test& operator ++ ()
	{
		++m_value;
		return *this;
	}
	//后置++重载
	Test operator ++ (int)
	{
		Test ret(m_value); //保存当前对象的值
		m_value++;
		return ret;
	}
};

int main()
{
	Test t(0);
	
	cout << t.getValue() << endl;
	
	Test tt = t++;
	
	cout << tt.getValue() << endl;
	
	//t++;
	
	cout << t.getValue() << endl;
    return 0;
}

真正的区别

对于基础类型的变量

1、前置++的效率与后置++的效率基本相同;
2、根据项目组编码规范进行选择;

对于类类型的对象

1、前置++的效率高于后置 ++ ;
2、尽量使用前置++ 操作符提高程序效率;

小结

1、编译优化使得最终的可执行程序更加有效;
2、前置++操作符和后置++操作符都可以被重载;
3、++操作符的重载必须符合其原生语义;
4、对于基础类型,前置++ 与后置++的效率几乎相同;
5、对于类类型,前置j++的效率高于后置++;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值