i++(前缀式自增)与++i(后缀式自增)的区别与效率比对—C/C++程序基础(三)

案例讲解

#include<iostream>
#include <stdio.h>

int main()
{
	int i = 10;
	printf("%d\n", ++i);
	printf("-----------------\n");

	i = 10;
	printf("%d\n", --i);
	printf("-----------------\n");

	i = 10;
	printf("%d\n", i++);
	printf("-----------------\n");

	i = 10;
	printf("%d\n", i--);
	printf("-----------------\n");

	i = 10;
	printf("%d\n", -i++);
	printf("-----------------\n");

	i = 10;
	printf("%d\n", -i++);
	printf("-----------------\n");

	system("pause");
	return 0;
}

运行结果: 

分析一下,这种问题很简单的,只要是前置加加(或减减),都是先完成自增(减)操作后,再进行下一步操作(在这个案例里面printf打印就是下一步操作);只要是后置加加(或减减),都是先完成下一步操作后,再进行自增(减)操作;如果没有下一步操作等着,那前置和后置就都一样了!

那么,下面再来考虑一个问题,++i和i++那种效率更高呢?

通过上面的例子也可以看出来,如果自增运算表达式的结果,没有被使用,二而仅仅是简单的用于增加一个操作数,那么前缀法和后缀法的效果是一样的,考虑的再仔细点,如果所操作的对象的数据类型是普通的int类型或者是一般的内建数据类型,那效率方面完全没差。

但是,如果所执行的i++,中的i(特别是如果i是一个类的话)是一个自己定义的数据类型呢?前缀式(++i)可以返回对象的引用,而后缀式(i++)必须返回对象的值,会产生较大的复制开销,引起效率降低,所以,导致返回引用的前缀式,肯定效率要高的多。因此,在处理自定义的数据类型白变量的时候,尽量使用前缀式效率更高!

补充:什么是内建的数据类型?答:一般指的是C++中默认的数据类型,比如:int、double、float、char,等等。

经验总结

  • 前缀式和后缀式的区别在于,当和其他操作连用的时候,前缀是先执行自增操作,后执行连用的操作;而后缀是正好反过来。
  • 前缀式和后缀式的效率区别:1)对于内建的数据类型,效率没有区别;2)对于自定义的数据类型,前缀式的效率更高。
  • 前缀式和后缀式效率区别的本质:前缀式返回的是引用,后缀式返回的是值。
发布了271 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_17846375/article/details/104879088