條款04 確定對象被使用前已先被初始化
阿新 • • 發佈:2017-11-16
clas local 定義 被調用 private 對象 引用 動作 style
一、概述
手工初始化內置類型對象
構造函數的成員初始化列表
static對象的初始化:包括non-local static和local static
二、細節
1. 你的構造函數使用了成員初始值列表了咩
不使用初始值列表:
class A { public: A(const string &s, int i) { //下面都是賦值,而非初始化 s = name; score = i; } private: string name; int score; };
使用初始值列表:
class A { public: A(const string &s, int i) :name(s), score(i) {} private: string name; int score; };
C++規定,對象的成員變量的初始化動作發生在進入構造函數體之前,即上面那個版本的各成員會先被默認初始化,然後才進入函數體執行賦值操作。
補充:如果成員變量是const或references,那它們一定要初始化,而不能賦值!
2. 不同文件裏的non-local static對象的初始化順序是未定義的
我們可以將每個non-local static對象用一個返回其引用的函數封裝起來,這樣它就像local static對象了,至少函數被調用時它會被初始化。
條款04 確定對象被使用前已先被初始化