日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C++初始化列表實(shí)現(xiàn)方法詳解

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

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站制作、成都網(wǎng)站制作、庫車網(wǎng)絡(luò)推廣、微信平臺(tái)小程序開發(fā)、庫車網(wǎng)絡(luò)營銷、庫車企業(yè)策劃、庫車品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供庫車建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com

先看下面這段程序

 
 
 
  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';  

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

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

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

的運(yùn)行順序是按照下面的代碼的實(shí)現(xiàn)順序:

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

所以當(dāng)運(yùn)行data(size)的時(shí)候,size還沒有定義,所以在后面的測試程序中輸出的data.size()的時(shí)候,就輸出了一個(gè)不確定的數(shù)。

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

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

【編輯推薦】

  1. C++多態(tài)性基本概念講述
  2. C++獲得系統(tǒng)時(shí)間具體實(shí)現(xiàn)代碼解析
  3. 自定函數(shù)實(shí)現(xiàn)C++讀取CSV文件
  4. C++ explicit關(guān)鍵字應(yīng)用于構(gòu)造函數(shù)
  5. 講述C++中調(diào)用Python腳本

網(wǎng)站名稱:C++初始化列表實(shí)現(xiàn)方法詳解
鏈接URL:http://www.dlmjj.cn/article/dhieeho.html