首页 > 试题广场 >

假定编译器不做优化,对一个int典型变量k,做前缀自加和后缀

[单选题]
假定编译器不做优化,对一个int型变量k,做前缀自加和后缀自加,哪个执行速度更快?
  • k++
  • ++k
  • 效果一样
  • 依赖处理器的架构
推荐
应该是++K。  K++ 还需要保存中间变量的值。
编辑于 2015-02-05 16:02:20 回复(0)
最佳答案,没有之一: 因为++k运算结束后,k的值和表达式的值相同。 而k++运算结束后,k的值和表达式的值不相同。编译器要开辟一个新的变量来保存k++表达式的值。 所以说:++k更快。
发表于 2015-08-26 15:53:32 回复(0)
曾经对k++和++k做过一次总结,贴上来吧
k++的执行过程是:1.首先返回k的值,这个值是个常量。2.然后创建一个临时量temp,将常量值赋给这个临时量,temp=常量,返回临时量temp 。3.最后将k自增1
++k的执行过程:1.首先将k自增。2.然后将k返回
理解了这两个过程,所有类似的题目都很好解决,比如那个printf("%d%d",i++,i++)和printf("%d%d",++i,++i)
发表于 2017-01-19 20:59:56 回复(2)
more effective c++条款六中有写道:
前置式:UPint& UPint::operator++()
                {
                        *this+=1;
                        return *this;
                }
后置式:const UPint UPint::operator++(int)
                {
                    UPint oldvalue=*this;
                    ++(*this);
                    return oldvalue;
                }
很显然后置式是以前置式为基础的,所以前置式快一点。
发表于 2018-12-30 16:17:04 回复(1)
选择B:
因为++k运算结束后,k的值和表达式的值相同。
而k++运算结束后,k的值和表达式的值不相同。编译器要开辟一个新的变量来保存k++表达式的值。
所以说:++k更快。
发表于 2015-08-02 18:16:05 回复(0)
可以去看一下c++ primer中对于重载前缀和后缀表达式的实现,后缀表达式实现中调用了前缀操作符函数,肯定是前缀效率更高!当然前面人说的也对,后缀要先保存当前值,然后进行加1操作(这个操作就是通过调用前缀表达式完成的)。
发表于 2016-05-27 22:14:04 回复(0)
C
二者处理速度基本一致
发表于 2015-01-17 16:21:56 回复(0)
more effective c++条款六中有写道:
前置式:UPint& UPint::operator++()
                {
                        *this+=1;
                        return *this;
                }
后置式:const UPint UPint::operator++(int)
                {
                    UPint oldvalue=*this;
                    ++(*this);
                    return oldvalue;
                }
很显然后置式是以前置式为基础的,所以前置式快一点。
发表于 2020-09-05 01:43:30 回复(0)

++k操作后k值和表达式的值是相同的,而k++运行后k和k++的表达式不一样,运行结束后需要再开辟一个空间来将++后的值赋给k
发表于 2020-03-04 12:09:58 回复(0)

++k中++重载返回类型是引用,所以也可以用++++k,引用更快

发表于 2020-02-28 16:48:45 回复(0)
因为++k运算结束后,k的值和表达式的值相同。 而k++运算结束后,k的值和表达式的值不相同。编译器要开辟一个新的变量来保存k++表达式的值。 所以说:++k更快。
发表于 2020-02-02 00:04:08 回复(0)
++k快是因为k++会有个临时变量的产生但是现在编译器有些不是已经优化了么?
发表于 2019-12-23 09:11:37 回复(0)
因为++k运算结束后,k的值和表达式的值相同。 而k++运算结束后,k的值和表达式的值不相同。编译器要开辟一个新的空间存放一个变量,来保存k++表达式的值。 所以说:++k更快。
发表于 2017-08-18 01:41:52 回复(0)
++k 运算结束后,表达式的值与k的值相同,而k++运算结束后,k的值和表达式的值不相同,编译器要开辟一个新变量来保存表达式的值。所以++k更快。
发表于 2016-05-18 19:28:15 回复(0)
最佳答案,没有之一:  因为++k运算结束后,k的值和表达式的值相同。   而k++运算结束后,k的值和表达式的值不相同。编译器要开辟一个新的变量来保存k++表达式的值。   所以说:++k更快。
发表于 2015-12-19 14:45:03 回复(0)
B,++k,变完直接使用,而k++,先用,再保存k++的值,最后赋给k。++k速度快
发表于 2015-10-20 14:11:39 回复(0)
当你重载前置++和后置++的时候就会体会到,前置++不需要重新建立临时对象进行保存,后置++要建立临时对象
发表于 2015-07-14 11:13:04 回复(0)
B
发表于 2015-04-02 15:30:11 回复(0)
答案:B
++k比k++速度快
因为++k想当与k=k+1
k++相当于两步操作,首先表达式反正值为k,然后再操作k=k+1
发表于 2015-01-15 17:40:50 回复(0)