转自: http://pppboy.blog.163.com/blog/static/30203796201041014447359/
◇引出:
写代码的时候一向用后置式递增,看起来好像更顺眼一些。
for (;;iter++)
{
///
}
iter++;
但看了《C++ Standard Library》,说前置递增效率更高,后置式递增要拷贝一个临时对象。
◇恐慌:
陷入恐慌中,想想以前写的代码,有种被鄙视的感觉,自卑中。。。。
◇查找VS研究:
成果1
int b = i++;
//可以分解为一下过程:
int temp = i;
b = temp;i = i + 1;
成果2
n++要开辟一个变量来保存n的值并返回,然后让n这个变量中的值加 1。而++n直接把1加到n这个变量的空间中去,并返回n这个空间中的值,没有开辟任何临时空间,性能更高。 |
成果3
const Counter Counter::operator++(int){Counter temp(*this);
++itsVal;//数据成员
return temp;
}
成果4
n+=1与n=n+1在结果上是等价的。但使用复合赋值操作符+=时,直接把1加到变量n的空间中去,左操作数只计算了一次加法;而使用长表达式 n=n+1时,先要去n这个变量空间中去取值(要寻址),与1做一次加法计算,然后做一次赋值计算把结果存入到n这个空间中,这样左操作数n计算了两次。因此,n+=1的性能更高。事实上,这也是复合赋值操作符存在一个基本原因。很多人刚开始八成会困惑,为什么会存在+=,-=,*=这样的操作符,能提高程序的性能就是其中的一个原因。 |
◇理解
1.VC编译器优化?能前置,就别后置。
2.养成使用前置操作符的习惯
3.养成使用复合赋值操作符的习惯
◇之后的总结:
[C++]前置自增(自减)和后置自增(自减)
http://pppboy.blog.163.com/blog/static/302037962011112311822421/