前置++i和后置的i++效率探究
2016-03-15 21:27
281 查看
网上看到,说前置++比后置++效率高,个人觉得都是对变量加1,效率应该没有区别,于是在vs2010中探索一番,特在此记录,如有不妥,欢
迎拍砖。
1. 仅对内置数据类型自加,两者效率一样
汇编代码如下:
![](http://img.blog.csdn.net/20160315204313819)
可见,前置加加和后置加加都有三个步骤:
(a)从内存中,拷贝数据到寄存器
(b)寄存器值加1
(c)从寄存器中,拷贝数据到内存
2. 非内置数据类型,前置++比后置++效率高
代码如下:
运行结果如下:
![](http://img.blog.csdn.net/20160315212049516)
由上可知:
(a)前置++返回的是自身的引用(返回引用可以用于链式运算)
(b)后置++,多生成了两个类对象,一个是局部对象tem和返回的临时对象。
所以,对于自定义类型,前置++较后置++效率高。
迎拍砖。
1. 仅对内置数据类型自加,两者效率一样
#include "stdafx.h" #include <stdio.h> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int a=1,b=2; int c,d; a++; ++b; return 0; }
汇编代码如下:
可见,前置加加和后置加加都有三个步骤:
(a)从内存中,拷贝数据到寄存器
(b)寄存器值加1
(c)从寄存器中,拷贝数据到内存
2. 非内置数据类型,前置++比后置++效率高
代码如下:
#include <stdio.h> #include <iostream> using namespace std; class Point //定义一个点类 { public: int x,y; public: Point& operator=(Point& hpoint) //赋值运算符 { x = hpoint.x; y = hpoint.y; cout<<"assign operator"<<endl; return *this; } Point(int _x,int _y):x(_x),y(_y) //构造函数 { cout<<"constructor"<<endl; } Point() //默认构造函数 { x = 0; y = 0; cout<<"constructor"<<endl; } Point(Point& ptem) //拷贝构造函数 { x = ptem.x; y = ptem.y; cout<<"copy constructor"<<endl; } ~Point() { cout<<"deconstructor"<<endl; } //参数int没有实际的意义,仅表示后置加加,返回对象 Point operator++(int); //前置加加,返回对象的引用 Point& operator++(); }; Point& Point::operator++() //前置 { x++; y++; return *this; } Point Point::operator++(int) //后置 { Point tem; //局部变量 tem = *this; cout<<"In late plusplus"<<endl; ++(*this); return tem; } int _tmain(int argc, _TCHAR* argv[]) { Point pt(2,5); cout<<"前置++"<<endl; ++pt; cout<<"后置++"<<endl; pt++; cout<<pt.x<<" "<<pt.y<<endl; cout<<"over!"<<endl; return 0; }
运行结果如下:
由上可知:
(a)前置++返回的是自身的引用(返回引用可以用于链式运算)
(b)后置++,多生成了两个类对象,一个是局部对象tem和返回的临时对象。
所以,对于自定义类型,前置++较后置++效率高。
相关文章推荐
- 安卓状态栏+kitkat
- 系统MPMoviePlayerController点击全屏按钮横屏显示方法
- centos7.0 安装LNMP运行环境
- C语言中的循环结构与选择结构
- 机器学习 —— 概率图模型(学习:对数线性模型)
- 关于C++中的友元函数的总结
- activity动画主题使用注意事项
- Flash Download Failed-"Cortex-M3"
- Flash Download Failed-"Cortex-M3"
- Linux df命令用法
- 非递归实现树的后序遍历
- 生活感触——锻炼中的坚持
- 104. Maximum Depth of Binary Tree
- 运行Hadoop的示例程序WordCount-Running Hadoop Example
- C语言中的运算符
- GD库简介和使用
- hdu 1051 Wooden Sticks
- pku1050 To the Max DP
- 快慢指针判断单链表中是否存在环,存在返回环的起点的值
- 160315、mybatis批量删除