T t與T t = T()的區別

    主要的區別就是默認構造函數對內置類型的初始化上。如果沒有T中沒有定義構造函數,則對於“T t”,並不會對 t 中內置類型設置初始值,是一個隨機值。但對於“T t = T()”,對 t 中內置類型會設置初始值,如 int 類型會設置爲0。而對於自定義類型,不管哪種方式,都會調用構造函數初始化。

#include <iostream>

using namespace std;

class Inside {
public:
	int getMem() { return _mem; }
private:
	int _mem;
};

class Outside {
public:
	int getMem() { return _mem; }
	void printInside() {
		cout << _in.getMem() << endl;
	}
private:
	int _mem;
	Inside _in;
};

int main() {
	Outside o1;
	Outside o2 = Outside();
	cout << o1.getMem() << " " << o2.getMem() << endl;
	o1.printInside();
	o2.printInside();
	return 0;
}

     上面代碼的輸出爲:

4196848 0
0
0

     可見只有o1的內置類型成員沒有被初始化爲0。但此時如果對Outside類添加了一個空函數體的構造函數,可以得到結果如下:

4196864 1044243872
0
32767

    o2 的內置類型成員及其成員變量 _in 的內置類型都沒有被初始化,因爲這個時候Outside的構造函數爲空,也就不會調用 _in 的構造函數初始化了,所以都是隨機數。

    不過比較奇怪的是 o1 的 _in 的內置類型還是被初始化爲 0 了,這個需要自己再深入瞭解下了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章