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

C++初始化列表實現方法詳解

開發 后端
C++初始化列表的實現方法將會在這篇文章中詳盡給出。希望剛剛接觸C++語言的朋友們能夠通過閱讀本文后充分的掌握這一應用技巧。

C++編程語言應用范圍非常廣泛,而且應用方式靈活,在一定程度上提高了編程人員的開發效率。那么接下來,我們就可以通過以下對C++初始化列表的相關實現方法的掌握,來初步了解這一語言的應用技巧。

先看下面這段程序

  1. #include < iostream> 
  2. #include < vector> 
  3. using namespace std;  
  4. class array  
  5. {  
  6. public:  
  7. array(int lowbound, int highbound);  
  8. vector< int> data;  
  9. int size;  
  10. int lbound, hbound;  
  11. };  
  12. array::array(int lowbound, int highbound):  
  13. size(highbound-lowbound+1),  
  14. lbound(lowbound),hbound(highbound),  
  15. data(size){}  
  16. int main()  
  17. {  
  18. array a(0,10);  
  19. cout < <  a.size < <  '\n';  
  20. cout < <  a.data.size() < <  '\n';  

這段程序看不出什么問題,至少一開始我看不出什么問題,但是運行的結果讓我吃驚,vector< int> data的長度是一個不確定的大小。

許多人都會說,在函數的C++初始化列表中進行了初始化了么?怎么還會沒有長度大小呢!其實是我們忽略了構造函數懂初始化列表的游戲規則,構造函數初始化的順序并不是按照我們看到的在構造函數后面寫的順序,而是按照成員變量在類中的定義的順序,所以上面

  1. array::array(int lowbound, int highbound):   
  2. size(highbound-lowbound+1),  
  3. lbound(lowbound),hbound(highbound),   
  4. data(size){} 

的運行順序是按照下面的代碼的實現順序:

  1. array::array(int lowbound, int highbound):  
  2. data(size),size(highbound-lowbound+1),  
  3. lbound(lowbound),hbound(highbound) {}  

所以當運行data(size)的時候,size還沒有定義,所以在后面的測試程序中輸出的data.size()的時候,就輸出了一個不確定的數。

那么C++為什么要這么做呢?

我們知道,對一個對象的所有成員來說,它們的析構函數被調用的順序總是和它們在構造函數里被創建的順序相反。那么,如果允許上面的情況(即,成員按它們在初始化列表上出現的順序被初始化) 發生,編譯器就要為每一個對象跟蹤其成員初始化的順序,以保證它們的析構函數以正確的順序被調用。這會帶來昂貴的開銷。所以,為了避免這一開銷,同一種類型的所有對象在創建(構造)和摧毀(析構)過程中對成員的處理順序都是相同的,而不管成員在C++初始化列表中的順序如何。

【編輯推薦】

  1. C++多態性基本概念講述
  2. C++獲得系統時間具體實現代碼解析
  3. 自定函數實現C++讀取CSV文件
  4. C++ explicit關鍵字應用于構造函數
  5. 講述C++中調用Python腳本
責任編輯:曹凱 來源: 博客園
相關推薦

2023-11-12 23:08:17

C++初始化

2024-03-13 08:52:43

C++初始化方式

2009-09-02 16:52:55

C#數組初始化

2010-02-06 14:40:50

C++初始化和賦值

2009-08-28 11:43:26

C#數組初始化

2009-08-28 11:24:48

C#一維數組初始化

2021-06-09 09:49:35

C++RAII語言

2010-02-05 17:16:05

C++構造函數

2010-02-06 15:58:10

C++集合初始化

2011-06-09 14:13:06

C++JAVA缺省初始化

2021-12-26 00:08:35

C++初始化列表

2009-08-31 09:47:22

C#靜態變量初始化

2023-10-06 20:57:52

C++聚合成員

2010-02-03 11:01:18

C++類靜態成員初始化

2009-08-31 10:38:34

C#變量初始化

2010-01-22 15:47:37

VB.NET初始化網格

2009-09-18 11:15:52

C#數組初始化

2023-12-04 10:57:52

函數C++

2009-07-31 17:51:27

C#對象初始化

2009-12-16 14:04:04

Ruby對象初始化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 超碰3| 国产第一区二区 | av网站免费在线观看 | 自拍偷拍中文字幕 | 欧美精品一区二区三区在线播放 | 九九色九九 | 热99| 色偷偷噜噜噜亚洲男人 | 免费观看一级特黄欧美大片 | 国产在线中文字幕 | 国产一区黄色 | 精品视频免费 | 欧美日韩一卡 | 欧美三区视频 | 日韩欧美在线免费 | h视频免费观看 | 国产成人精品免费 | 亚洲欧美国产毛片在线 | 精品一区二区三 | 日韩电影一区 | 黄色一级毛片免费看 | 国产精品久久久久久久久久三级 | 午夜专区| 男女羞羞视频在线免费观看 | 成人在线视频网站 | 无码一区二区三区视频 | 成人一区二区三区 | 国产精品亚洲一区二区三区在线观看 | 中文在线а√在线8 | 亚洲精品在线免费看 | 中文字幕国产精品 | 午夜影院 | 国产三级精品三级在线观看四季网 | 天天干b| 人人草天天草 | 欧美精品第一区 | 中文字幕日韩欧美一区二区三区 | 久久人人网| 国产精品黄 | 日韩精品成人网 | 99久久视频|