2 mengxiang tianji mengxiang_tianji 于 2016.03.27 14:53 提问

前自增和后自增效率比较
    书上说,对于C++中内建数据类型,前自增和后自增效率差别不大,对于自定义数据类型,后自增要返回对象的值并在原对象中自增,导致产生复制开销,引起效率降低。
    问题:1、无论内建还是自定义数据类型,单条语句自增运算,后自增和前自增效果一样,编译器对于两者的执行差不多,后自增应该没必要复制吧?
                        2、假如自定义数据类型中只含有一个内置数据类型成员并且定义该数据类型的自增运算,编译器会不会将它的运算优化成只按单个数据类型处理?

2个回答

caozhy
caozhy   Ds   Rxr 2016.03.27 17:47

这是编译器优化的问题。前自增,原来的变量拥有自增前的值,所以拷贝在前,后自增,拷贝在后,但是如果后自增之后没有进一步改变变量,复制会被优化掉,这才是后自增性能高的原因,但是这种性能高只是假想而已,因为必须满足一个前提,后自增后这个变量没有修改操作。

oyljerry
oyljerry   Ds   Rxr 2016.03.27 17:41

如果不是特意追求这个 不需要特别考虑这个区别编译器已经做了各种优化 直接按习惯来添加

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
前自增与后自增到底啥区别?
前自增操作:该操作使其操作数加1,操作结果是修改后的值。 后自增操作:同样对其操作数加 1(或减 1),但操作后产生操作数原来的、未修改的值作为表达式的结果。 前置操作返回加1后的值,所以返回对象本身,这是左值。而后置操作返回的则是右值。 前自增: int i = 0, j; j = ++i;      // j = 1, i = 1: prefix yields incre
前自增和后自增运算符的重载
很久以前(八十年代),没有办法区分++和--操作符的前缀与后缀调用。这个问题遭到程序员的报怨,于是C++语言得到了扩展,允许重载 increment 和 decrement操作符的两种形式。然而有一个句法上的问题,重载函数间的区别决定于它们的参数类型上的差异,但是不论是increment或decrement的前缀还是后缀都只有一个参数。为了解决这个语言问题,C++规定后缀形式有一个int类型参数,当函数被调用时,编译器传递一个0做为int参数的值给该函数。increment的前缀形式表示“增加然后取回”,后
Java_语言基础:前置自增和后置自增
自增操作,是C++和Java语言都提供的一个基本运算符,自减操作类似。 前置自增,是先将值自增,然后返回自增后的值作为自增表达式的值;后置自增,是等价于有个临时变量保存当前值,然后当前值自增,返回临时变量作为后置自增表达式的值。 概念简单,但是看到别人讨论的问题,还是有些疑惑:int y = 1; 输出 (y++&y++);这段代码,在VS2005和JDK1.6下的结果竟然不同... Jav
java基础 int变量自增 效率问题
本文论述java中以下三条语句的效率问题。 1. i++; 2. i = i+1; 3. i += 1; 所采用的的方法是只写出包含这三条语句的方法,编译成字节码,然后分析字节码指令。 下面是我的java源码:public class Some { public void add1(int a){ a++; } public void ad
C#学习回顾笔记六:前自增和后自增
本文主要讲解前自增和后自增的使用以及细节,另外前自减和后自减没在文章中详细介绍,但原理同前自增和后自增。
关于++it和it++(前自增和后自增)
++it前自增,迭代器向前移动,返回对加1后的迭代器的引用; it++后自增,迭代器向后移动,返回原来的迭代器; 例如: while(it!=vec.end())      vec.push_back(*it++); 自增操作使得it先向后移动(即it+1),但后自增的返回值依然是it,所有解引用运算的操作数依然是it,当进行下一次it!=vec.end()判断时,此时的it已自增为(i
为何迭代器前置式递增比后置式递增效率要高
后置式需要一个额外的临时对象,因为它必须存放迭代器的原本位置并将它返回。所以一般使用++itr,而不要使用itr++。
C++ 操作符重载
C++操作符的重载 包含了双目运算符 单目运输符 以及前自增 后自增
C/C++中自增自减的前置和后置区别
11
前自增和后自增
学习C语言也有年头了,前自增和后自增一直是我的心病,今天决心把它解决了,要不某天被小菜问倒可不好啊(我也是小菜),说干就干,上网查下资料先,看看前辈们能的经验教训,再结合我的调试和验证,写下如下内容: 前自增整体表达式的值是i加1之后的值 后自增整体表达式的值是i加1之前的值   例一: #include int main() {    int i = 3;    int j