i++和++i的区别--后缀运算符效率研究

i++和++i的区别

如果使用内置的类型的话是没有太大区别的,内置类型比如说int 等。

如果使用的是class构造的对象,那么区别还是挺大的。

我们要先理解他们各自的工作方式。

++i我们成为前缀运算符,它是先自增,然后返回值

i++称为后缀运算符,它是先建立一个副本,自己递增,最后返回副本。

下面来解释一下为什么i++为何效率会这么低。

我们对++后缀运算符重载,我们就能发现其中的问题

class Time
{
public:
	Time operator++(int);
	Time operator++();
private:
	int sec;
};

Time Time::operator++()
{
	sec++;
	return (*this);
}

Time Time::operator++(int)
{
	Time temp(*this);
	sec++;
	return temp;
}

可以看到在C++中前缀重载不需要建立新的对象,但是后缀就不一样了,后缀需要返回的原来的值,那么就不得不保存一个副本用来返回,这是导致i++效率低下的根本原因。

时间: 2024-10-03 02:30:56

i++和++i的区别--后缀运算符效率研究的相关文章

前缀++ 后缀++ 运算符重载

前缀++ 后缀++ 运算符重载 2012-12-06 10:38 1733人阅读 评论(0) 收藏 举报  分类: C常用备查(24)  C++(43)  下面例子程序中   const Fraction operator ++(int)   中     int不过是个哑元(dummy),是永远用不上的     它只是用来判断++是prefix   还是   postfix     记住,如果有哑元,则是postfix,否则,就是prefix     就像其他的一元算法和逻辑运算一样     而

关于"&"运算符效率低下的问题,有什么好的解决办法?

大家看看. 我们知道用" & "号比用"+"号快.因为"+"要对字符窜变量做类型判断并转换. 当时也没想出什么好办法.只是将两次"&"运算拆开,速度提了一倍.还是解决不了问题. 结果就是:for i 1 to 5000 ,i以字符形式相加.用&运算,要600-800ms 现在试试下面这个.建了个CStrCat的类. <% PageExeTime1=Timer * 1000 '计时开始 Set sc

php中单引号,双引号的区别和执行效率

在php中处理字符串有单引号和双引号,到底有什么不同?哪个效率更高呢?今天做了测试,看下面的代码. 测试代码如下: $single_quotes = 'This is a String'; $double_quotes = "This is a String"; echo $single_quotes; echo $double_quotes; $var = 'String'; $single_quotes_var = 'This is a '.$var; $double_quotes

select count(*)、count(1)、count(0)的区别和执行效率比较

区别 执行效率比较 执行效率从高到低 count(*)=count(1)=count(0)>count(colFirst)>count(colLast) 1.由于count(*)的算法与列偏移量无关,所以count(*)最快. 2.因为count(指定的有效值),执行计划都会转化为count(*) 3.列的偏移量决定性能,列越靠后,访问的开销越大. 如果指定的是列名,会判断是否有null,null不计算 原文地址:https://www.cnblogs.com/tufujie/p/942639

count(*)、count(1)和count(column)区别以及执行效率高低比较

[mysql]count(*).count(1)和count(column)区别 小结:  count(*) 对行的数目进行计算,包含NULL.  count(column) 对特定的列的值具有的行数进行计算,不包含NULL值.  count(1) 这个用法和count(*)的结果是一样的. 性能问题:  1.任何情况下 SELECT COUNT(*) FROM tablename 是最优选择:  2.尽量减少 SELECT COUNT(*) FROM tablename WHERE COL =

取得一张表的数据不在另一张表中的最优秀方法(JOIN与EXISTS的效率研究)

业务需求: 公司有个CRM经纪人管理系统,前天遇到的比较棘手的问题是,要查询一张表中不在另一张表中的所有用户并分页显示,但问题是外表的数据量很大,如果用not in(select ..),not exists(select ...)之类的子查询 的话需要对子查询表进行所有信息的调用过滤才行,一单子查询数据量过大效率问题就来了,于是就私下里查了一点资料,并根据资料中提供的例子建立了对应的测试表做了一些测试,随后将解决问题的方法移交给了技术部的邹鸿同事去解决问题,因为是前天的事情了,本来是事情忙没时

List的三个实现类的添加效率研究

前几天在网上看见有人怀疑ArrayList,LinkedList和Vector的添加效率问题.我觉得他说的也挺有道理的,于是就做了一个实验.当然,我做的实验也不是很严谨,使用的MyEclipse,然后使用单元测试进行测试的数据.测试结果如下:(单位:s) 1000            10000            100000            500000            1000000            5000000 ArrayList    0.039        

Mysql中count(*),DISTINCT的使用方法和效率研究

在处理一个大数据量数据库的时候突然发现mysql对于count(*)的不同处理会造成不同的结果 比如执行SELECT count(*) FROM tablename即使对于千万级别的数据mysql也能非常迅速的返回结果而对于SELECT count(*) FROM tablename WHERE.....mysql的查询时间开始攀升 仔细查阅累下手册,发现当没有WHERE语句对于整个mysql的表进行count运算的时候MyISAM类型的表中保存有总的行数,而当添加有WHERE限定语句的时候My

JavaScript运算符:递增递减运算符前置和后置的区别

从两段代码说起 var num1 = 2; var num2 = 20; var num3 = --num1 + num2; var num4 = num1 + num2; console.log(num1 +'-' + num2 +'-'+ num3 +'-' + num4) 将四个数分别打印是多少? var num1 = 2; var num2 = 20; var num3 = num1-- + num2; var num4 = num1 + num2; console.log(num1 +