成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++聲明放置正確應用方式

開發 后端
如果我們能夠正確的進行C++聲明放置,將會給我們的應用程序帶來非常大的好處。在這里我們將會在這里為大家詳細介紹相關操作方法。

C++編程語言既然被看做是C語言的升級版本,它必然會具有C語言中的很多功能。不過其中還是有很多比C語言更加優化的功能。比如C++聲明的一些內容等。C++聲明放置將會對性能產生顯著影響。同樣,對postfix和prefix運算符的選擇也會影響性能。這一部分我們集中討論四個問題:初始化v.s 賦值,在程序確實要使用的地方放置聲明,構造函數的初始化列表,prefix v.s postfix運算符。#t#

C++編程語言可以支持很多程序設計風格,能夠在很大程度上幫助開發人員提高開發效率。初學者們可能還對C++中的聲明有些不太明白,在這里我們將會為大家詳細介紹一下C++聲明放置的相關方法,方便大家理解。

(1) 請使用初始化而不是賦值

在C語言中只允許在一個函數體的開頭進行變量的聲明,然而C++聲明放置可以出現在程序的任何位置。這樣做的目的是希望把對象的聲明拖延到確實要使用它的時候再進行。這樣做可以有兩個好處:

1. 確保了對象在它被使用前不會被程序的其他部分惡意修改。如果對象在開頭就被聲明然而卻在20行以后才被使用的話,就不能做這樣的保證。

2. 使我們有機會通過用初始化取代賦值來達到性能的提升,從前聲明只能放在開頭,然而往往開始的時候我們還沒有獲得我們想要的值,因此初始化所帶來的好處就無法被應用。但是現在我們可以在我們獲得了想要的值的時候直接進行初始化,從而省去了一步。

注意,或許對于基本類型來說,初始化和賦值之間可能不會有什么差異,但是對于用戶定義的類型來說,二者就會帶來顯著的不同,因為賦值會多進行一次函數調用----operator =。因此當我們在賦值和初始化之間進行選擇的話,初始化應該是我們的***。

(2) C++聲明放置在合適的位置

在一些場合,通過移動聲明到合適的位置所帶來的性能提升應該引起我們足夠的重視。例如:

  1. bool is_C_Needed();   
  2. void use()   
  3. {   
  4. C c1;   
  5. if (is_C_Needed() == false)   
  6. {   
  7. return; //c1 was not needed   
  8. }   
  9. //use c1 here   
  10. return;   

上面這段代碼中對象c1即使在有可能不使用它的情況下也會被創建,這樣我們就會為它付出不必要的花費,有可能你會說一個對象c1能浪費多少時間,但是如果是這種情況呢:C c1[1000];我想就不是說浪費就浪費了。但是我們可以通過移動聲明c1的位置來改變這種情況:

  1. void use()   
  2. {   
  3. if (is_C_Needed() == false)   
  4. {   
  5. return; //c1 was not needed   
  6. }   
  7. C c1; //moved from the block's beginning   
  8. //use c1 here   
  9. return;   

怎么樣,程序的性能是不是已經得到很大的改善了呢?因此請仔細分析你的代碼,C++聲明放置所帶來的好處是你難以想象的。

(3) 初始化列表

我們都知道,初始化列表一般是用來初始化const或者reference數據成員。但是由于他自身的性質,我們可以通過使用初始化列表來實現性能的提升。我們先來看一段程序:

  1. class Person   
  2. {   
  3. private:   
  4. C c_1;   
  5. C c_2;   
  6. public:   
  7. Person(const C& c1, const C& c2 ): c_1(c1), c_2(c2) {}   
  8. }; 

當然構造函數我們也可以這樣寫:

  1. Person::Person(const C& c1, const C& c2)   
  2. {   
  3. c_1 = c1;   
  4. c_2 = c2;   

那么究竟二者會帶來什么樣的性能差異呢,要想搞清楚這個問題,我們首先要搞清楚二者是如何執行的,先來看初始化列表:數據成員的聲明操作都是在構造函數執行之前就完成了,在構造函數中往往完成的只是賦值操作,然而初始化列表直接是在數據成員聲明的時候就進行了初始化,因此它只執行了一次copy constructor。再來看在構造函數中賦值的情況:首先,在構造函數執行前會通過default constructor創建數據成員,然后在構造函數中通過operator =進行賦值。因此它就比初始化列表多進行了一次函數調用。性能差異就出來了。但是請注意,如果你的數據成員都是基本類型的話,那么為了程序的可讀性就不要使用初始化列表了,因為編譯器對兩者產生的匯編代碼是相同的。

(4) postfix VS prefix 運算符

prefix運算符++和—比它的postfix版本效率更高,因為當postfix運算符被使用的時候,會需要一個臨時對象來保存改變以前的值。對于基本類型,編譯器會消除這一份額外的拷貝,但是對于用戶定義類型,這似乎是不可能的。因此請你盡可能使用prefix運算符。

以上就是對C++聲明放置的相關介紹。

責任編輯:曹凱 來源: 博客園
相關推薦

2010-02-05 17:49:24

C++常量引用

2010-02-01 15:26:44

C++ inline函

2010-02-22 14:09:08

WCF Dispose

2010-03-04 13:30:11

Python file

2021-07-02 16:13:01

區塊鏈金融數據庫

2010-03-03 17:58:16

Python同步隊列

2010-01-25 11:29:33

Android計時器

2010-03-03 17:33:52

Python讀取XML

2010-05-28 15:16:40

MySQL 資源

2009-12-07 14:38:14

PHP foreach

2010-03-04 14:51:21

Python Conf

2010-02-22 10:42:12

WCF Stream

2010-05-25 18:01:35

linux MySQL

2010-05-28 19:20:36

MySQL mysql

2010-07-21 10:50:48

SQL Server存

2010-07-26 17:43:34

SQL Server

2010-03-04 09:40:52

Python Clas

2010-03-05 15:01:29

Python解析XML

2010-08-18 16:45:40

IBM DB2 Cat

2010-03-04 14:02:51

Python大小寫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品黄色 | 久久精品免费一区二区三 | 免费看91 | 男女羞羞视频网站 | 亚洲欧美精品国产一级在线 | 青娱乐av | 久久午夜精品福利一区二区 | 亚洲国产精品99久久久久久久久 | 亚洲一区二区网站 | 黄色在线免费看 | 久久99精品国产麻豆婷婷 | 日韩精品免费 | 欧美亚洲激情 | 91国产精品 | 亚洲欧美bt | 亚洲品质自拍视频网站 | 欧美性网站 | 久久久久久亚洲精品 | 91午夜在线 | 国产高清在线精品 | 国产日韩欧美在线 | 欧美亚洲视频在线观看 | 日本精品一区二区三区在线观看视频 | 免费黄色大片 | 国产在线97| 国产成人精品一区二区三区网站观看 | 特黄特色大片免费视频观看 | 欧美另类视频 | 国内自拍视频在线观看 | 五月综合激情网 | 国产欧美在线一区 | 在线免费国产视频 | 成人在线一区二区 | 欧美精品一区三区 | 一级高清视频 | 蜜桃av一区二区三区 | av网站在线播放 | 成人免费视频 | 99久久国产| 天天干视频网 | 欧美色图另类 |