青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

春暖花開
雪化了,花開了,春天來了
posts - 149,comments - 125,trackbacks - 0
對于成員初始化列表,熟悉有不是很熟悉。什么情況下使用呢?心里還是發(fā)怵,說不出所以然來。

學(xué)習(xí)是王道,搜索是方法。有了網(wǎng)絡(luò)就是好。

摘自:http://www.cnblogs.com/heyutao/archive/2009/05/22/1487081.html

成員初始化列表

類對象的構(gòu)造順序是這樣的:
1.分配內(nèi)存,調(diào)用構(gòu)造函數(shù)時(shí),隱式/顯示的初始化各數(shù)據(jù)成員
        初始化階段可以是顯式的或隱式的,取決于是否存在成員初始化表。隱式初始化階段按照聲明的順序依次調(diào)用所有基類的缺省構(gòu)造函數(shù),然后是所有成員類對象的缺省構(gòu)造函數(shù)。
2.進(jìn)入構(gòu)造函數(shù)后在構(gòu)造函數(shù)中執(zhí)行一般計(jì)算

        計(jì)算階段由構(gòu)造函數(shù)體內(nèi)的所有語句構(gòu)成。在計(jì)算階段中,數(shù)據(jù)成員的設(shè)置被認(rèn)為是賦值,而不是初始化。

使用初始化列表有兩個(gè)原因:

1.必須這樣做:

        三種情況下需要使用初始化成員列表
        1)對象成員;
        2)const修飾的成員;
        3)引用成員數(shù)據(jù);

(1)如果有一個(gè)類成員,它本身是一個(gè)類或者是一個(gè)結(jié)構(gòu),而且這個(gè)成員它只有一個(gè)帶參數(shù)的構(gòu)造函數(shù),而沒有默認(rèn)構(gòu)造函數(shù),這時(shí)要對這個(gè)類成員進(jìn)行初始化,就必須調(diào)用這個(gè)類成員的帶參數(shù)的構(gòu)造函數(shù),如果沒有初始化列表,那么他將無法完成第一步,就會報(bào)錯(cuò)。

using namespace std;
class ABC
{
public:
    ABC(
int x,int y,int z):a(x),b(y),c(z){};
private:
  
int a;
    
int b;
    
int c;
}
;
class MyClass
{
public:
    MyClass(
int a,int b,int c):abc(a,b,c){}
private:
    ABC abc;
}
;

int main()
{
    MyClass o(
1,2,3);
    
return 0;
}

(2)當(dāng)類成員中含有一個(gè)const成員時(shí)

(3)當(dāng)類成員中含有一個(gè)引用時(shí)

#include<iostream>
using namespace std;

class ConstRef {
public:
    ConstRef(
int i);
    
void print();
private:
    
int a;
    
const int b;//const成員
    int &c;//引用
}
;

ConstRef::ConstRef(
int i):b(i),c(a)//含有一個(gè)const對象時(shí),或者是一個(gè)引用時(shí)使用初始化成員列表
{
    a 
= i;       // ok
    
//b = i;         // 錯(cuò)誤
    
//c = a;       // 錯(cuò)誤
}

void ConstRef::print()
{
    cout
<<a<<endl;
    cout
<<b<<endl;
    cout
<<c<<endl;
}

int main()
{
    ConstRef o(
1);
    o.print();
    
return 0;
}


 

2.效率要求這樣做:

類對象的構(gòu)造順序顯示,進(jìn)入構(gòu)造函數(shù)體后,進(jìn)行的是計(jì)算,是對他們的賦值操作,顯然,賦值和初始化是不同的,這樣就體現(xiàn)出了效率差異,如果不用成員初始化列表,那么類對自己的類成員分別進(jìn)行的是一次隱式的默認(rèn)構(gòu)造函數(shù)的調(diào)用,和一次復(fù)制操作符的調(diào)用,如果是類對象,這樣做效率就得不到保障。

注意:構(gòu)造函數(shù)需要初始化的數(shù)據(jù)成員,不論是否顯式的出現(xiàn)在構(gòu)造函數(shù)的成員初始化列表中,都會在該處完成初始化,并且初始化的順序和其在聲明時(shí)的順序是一致的,與列表的先后順序無關(guān),所以要特別注意,保證兩者順序一致才能真正保證其效率。

現(xiàn)在明白為什么要使用成員初始化列表了。

這里再強(qiáng)調(diào)一下類的初始化的順序,應(yīng)該是類成員變量的初始化不是按照初始化表的順序被初始化的,而是按照在類中聲明的順序被初始化的。
這是摘自:Effective C++學(xué)習(xí)筆記:初始化列表中成員列出的順序和它們在類中聲明的順序相同 http://www.shnenglu.com/xczhang/archive/2008/01/22/41613.html

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

注意:上述內(nèi)容不適用于static變量,static變量應(yīng)該在類的構(gòu)造函數(shù)前被初始化。



好文章拿來學(xué)習(xí),請作者見諒哈!

posted on 2009-06-18 13:33 Sandy 閱讀(482) 評論(0)  編輯 收藏 引用 所屬分類: c++學(xué)習(xí)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产亚洲二区| 国产一区视频观看| 9久re热视频在线精品| 麻豆成人综合网| 午夜在线精品偷拍| 国产日韩欧美一区二区三区在线观看 | 久久精品视频在线观看| 国产毛片精品国产一区二区三区| 香蕉久久夜色精品| 亚洲一区二区三区免费视频| 国产精品综合av一区二区国产馆| 91久久国产综合久久蜜月精品 | 亚洲日本视频| 国产精品黄色| 久久国产天堂福利天堂| 久久国产精品色婷婷| 亚洲国产成人久久| 亚洲日本无吗高清不卡| 亚洲国产精品一区二区第一页| 久久久99爱| 久久久蜜臀国产一区二区| 欧美大片在线观看一区| 亚洲私人黄色宅男| 欧美一区二区三区视频在线观看 | 欧美国产在线观看| 欧美日一区二区在线观看 | 欧美连裤袜在线视频| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 亚洲一级黄色片| 影音先锋日韩有码| 亚洲精品一区二区三区不| 国产精品久久一卡二卡| 男女精品网站| 国产精品欧美经典| 亚洲欧美卡通另类91av| 夜夜嗨av一区二区三区四季av| 欧美激情中文字幕乱码免费| 久久人人97超碰国产公开结果 | 亚洲国产精品ⅴa在线观看| 久久久精品一品道一区| 欧美.com| 一区二区三区精品久久久| 久久久青草婷婷精品综合日韩| 一区二区三区四区五区视频 | 久久欧美肥婆一二区| 亚洲专区欧美专区| 免费看的黄色欧美网站| 久久久久久999| 国产精品日韩在线观看| 亚洲国产日日夜夜| 黄网站色欧美视频| 亚洲一区二区视频在线| 久久精品伊人| 亚洲国产日韩综合一区| 久久精品成人一区二区三区| 欧美激情精品久久久久久| 日韩视频免费观看高清在线视频| 欧美一区二区三区在线视频| 欧美激情偷拍| 亚洲欧美日韩综合国产aⅴ| 欧美午夜www高清视频| 最新亚洲一区| 欧美一区二区网站| 国产欧美va欧美va香蕉在| 亚洲永久免费精品| 欧美成人一区二区三区在线观看| 国产一区二区| 欧美日本在线播放| 欧美专区日韩专区| 久久久精品性| 亚洲调教视频在线观看| 韩国女主播一区二区三区| 久久av免费一区| 99热免费精品在线观看| 一区二区三区你懂的| 国产一区二区三区网站| 欧美福利专区| 99精品视频一区| 欧美国产免费| 久久激情久久| 亚洲欧美在线播放| 亚洲欧洲中文日韩久久av乱码| 欧美国产丝袜视频| 久久精品久久综合| 亚洲一级二级在线| 亚洲精品视频一区二区三区| 老司机67194精品线观看| 午夜日韩在线观看| 一区二区欧美日韩视频| 最近看过的日韩成人| 国产在线国偷精品产拍免费yy| 欧美日韩一区二区免费视频| 午夜一区不卡| 亚洲午夜一区| 一区二区日韩| 久久午夜国产精品| 亚洲麻豆视频| 亚洲国产你懂的| 在线观看视频一区| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品一区久久久久| 国产精品视频福利| 欧美性猛交一区二区三区精品| 欧美激情一区二区三区成人| 欧美丰满少妇xxxbbb| 男人插女人欧美| 蜜桃久久av一区| 亚洲自拍偷拍麻豆| 亚洲一区999| 亚洲午夜一二三区视频| 亚洲一区二区三区四区五区午夜| 亚洲图片你懂的| 亚洲一区激情| 午夜视频精品| 久久精品五月婷婷| 久久亚洲春色中文字幕| 免费观看在线综合| 欧美精品色综合| 欧美三区在线视频| 国产精品一区在线观看| 国产欧美日韩在线视频| 韩国av一区二区三区| 在线免费观看欧美| 国产欧美精品| 精品福利电影| 日韩午夜精品| 亚洲国产精品高清久久久| 亚洲欧洲精品一区二区三区| 夜夜精品视频| 翔田千里一区二区| 快射av在线播放一区| 欧美韩日一区二区三区| 99国产精品国产精品久久| 亚洲一区二区三区精品视频| 欧美在线三级| 欧美激情一区二区三区在线| 欧美午夜一区二区三区免费大片| 国产欧美午夜| 亚洲狠狠丁香婷婷综合久久久| 一区二区三区日韩| 久久久久国产成人精品亚洲午夜| 欧美刺激性大交免费视频| 亚洲精品久久久久久久久| 亚洲女人天堂av| 麻豆亚洲精品| 国产精品一香蕉国产线看观看 | 亚洲欧美中文另类| 99精品欧美| 久久精彩视频| 欧美日韩卡一卡二| 韩国女主播一区| 亚洲一区二区免费视频| 久久亚洲视频| 中文日韩在线| 午夜欧美精品久久久久久久| 蜜臀a∨国产成人精品| 国产精品乱子乱xxxx| 亚洲激情欧美激情| 欧美一区二区福利在线| 91久久久久久久久| 欧美在线三区| 国产精品国产三级国产aⅴ9色| 亚洲第一二三四五区| 欧美亚洲视频一区二区| 亚洲高清久久| 亚洲精品国产视频| 久久九九国产精品| 国产精品婷婷午夜在线观看| 亚洲精品视频免费在线观看| 亚洲无限av看| 欧美黄色aaaa| 久久婷婷久久| 国产一区二区三区四区在线观看| 亚洲欧美在线网| 99视频精品免费观看| 欧美黄色一区二区| 亚洲高清不卡av| 另类天堂视频在线观看| 午夜精品久久久久久久99水蜜桃 | 伊人久久婷婷| 久久精品系列| 午夜精品久久久久久久久| 国产精品高清免费在线观看| 一本色道久久综合亚洲精品小说| 亚洲国产成人精品女人久久久| 久久尤物视频| 国产精品xxxav免费视频| 99精品视频免费观看视频| 亚洲第一精品夜夜躁人人爽| 久久婷婷人人澡人人喊人人爽| 国内免费精品永久在线视频| 久久久久久综合| 欧美亚洲免费高清在线观看| 国产日韩欧美精品| 久久精品国产99精品国产亚洲性色| 亚洲砖区区免费| 国产亚洲一区在线| 久久久久www| 久久久噜噜噜久噜久久| 亚洲国产欧美一区|