编程小知识之从运算符重载看前置和后置自增运算


编程小知识之从运算符重载看前置和后置自增运算

前言

当变量i的数据类型是c++语言默认提供的类型的话,他们的效率是一样的。

 1.从其汇编执行的条数是一样的,所以其执行效率是一样的

编程小知识之从运算符重载看前置和后置自增运算

看上图应该明白,i++ 和 ++i 的效率差异主要来自于处理 i++ 时,需要先保存 i 的当前值留作稍后使用。如果之后没有人使用 i 的当前值,也就是说没有C语言代码读取 i++ 的值,编译器实在没有必要保存 i 的当前值了,因此就会将这一步优化掉。

2、我们自定的数据类型,++i效率高于i++,通过运算符重载来给大家说明这一点

C++ 中 ++运算符重载

前置和后置重载实现如下:

<code>#include <iostream>
#include <string>
using namespace std;
class Data
{
public:
\tData(){}
\tData(int num) :num(num)
\t{

\t}
\t//以++为例
\tvoid print()
\t{
\t\tcout << num << endl;
\t}
\t// warning C4620: 未找到类型“Data”的“运算符 ++”后缀形
\tData operator++(int)\t//int表示这个是后置,起说明作用
\t{
\t\tcout << "后置++" << endl;
\t\tData object(this->num++);
\t\treturn object;
\t}

\t//前置的
\tData operator++()
\t{
\t\tcout << "前置++" << endl;
\t\tthis->num++;
\t\treturn (*this);
\t}
protected:
\tint num;
};
//迭代器-->类
int main()
{
\tData object(1002);
\t//++ 的解释: object=object+1;
\tData result = object++;
\tobject.print();
\tresult.print();
\tData result2 = ++object;
\tresult2.print();
\tobject.print();


\tsystem("pause");
\treturn 0;
}/<string>/<iostream>/<code>
编程小知识之从运算符重载看前置和后置自增运算

后++必须要有一个临时对象才可以完成,产生临时对象,需要发生一系列的拷贝动作,效率自然比直接引用对象低很多。

尾言

文章都是手打原创,每天最浅显的介绍C语言、C++,windows知识,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。如果足下基础比较差,不妨关注下人人都可以学习的视频教程,通俗易懂,深入浅出,一个视频只讲一个知识点。视频不深奥,不需要钻研,在公交、在地铁、在厕所都可以观看,随时随地涨姿势。


分享到:


相關文章: