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)對於自定義的數據類型,前綴式的效率更高。
  • 前綴式和後綴式效率區別的本質:前綴式返回的是引用,後綴式返回的是值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章