C++类内初始化与初始化列表
天蓬老师
天蓬老师 2017-04-17 12:58:14
0
2
936
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(2)
小葫芦

如@GAO 所說,C++11的類別內初始化允許非static成員的初始化,可以用{}或=號。
建構函式的初始化列表 與 類別內成員初始化 沒有誰好誰不好,誰來替代誰,兩種方法可互相補充使用。類別內初始化有一些好處:
1、當你有多個建構子時,如果使用初始化列表,每個建構函式都要寫一遍,煩人不說,同時產生重複程式碼,修改易漏。如果把這些成員都用類別內初始化,初始化列表就不用再列出它們了。
2、類內初始化,成員之間的順序是隱式的,會有些便利。如果使用初始化列表,它是有順序之分的,順序不對,編譯器會警告。
3、對於簡單的類別或結構,沒有建構子的,可以直接用類別內初始化在成員宣告的同時直接初始化,方便。

對於某些類別類型的成員初始化要小心,如果成員之間有依賴關係,這時使用初始化列表明確的指明這些成員的構造(初始化)順序是比較穩健的。

如果成員已經使用了類別內初始化,但在建構函式的初始化列表又列出來,編譯器以後者優先,類別內初始化會被忽略。如果某些成員使用不同建構函式時,會有不同的預設值,這種情況就要用初始化列表。同時,其它成員仍可使用類別內初始化。

類別內初始化絕對不是解決什麼內建型別預設初始化時未定義問題。物件導向程式設計一個很重要的原則,程式設計師有責任保證物件產生出來,它的每個成員都必須是初始化的,這是設計問題以及基本意識,無論是使用哪種方法初始化。

PHPzhong

好像C++11之後就支援類別內初始化了,在先前類別內初始化是不允許的

class A{
    static const int a = 7; //C++98允许
    int b = 8; //C++11允许,而98不允许
}

我個人認為類別內初始化將會隨著C++11 成為主流。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板