c++結構體初始化未生效

在c語言中,我們通常都是用memset來初始化一個結構體。但是在c++中,使用memset來初始化一個結構體,卻經常得不到正常的結果。這是爲什麼呢?
問題其實是出在了,結構體成員變量類型上了,因爲使用了非ADT類型(大致就是c++一些特有的類型,如string,vector等等)。memset初始化的時候,是將一塊固定大小的內存置空,而string,vector等的大小並不是固定的,而是會動態變化的,所以當大小發生了變化,這是memset的初始化便是未定義的行爲了,所以有時會導致嚴重的bug。這也是c++在提供接口時,必須使用ADT類型的原因。比如要把string換成char數字,vector換成數組等。
那麼在c++中如何初始化這些特殊的結構體呢?在c++中struct和class除了權限屬性不一樣外,其他具有一樣的屬性。
所以可以模仿class初始化來初始化這些結構體。

    struct stStudent
    {
    	public:
    	stStudent()
    	{
    		age = 0;
    	}
	
	string name;//name不初始化不會影響結果,因爲string是有構造函數的,
						//在stStudent構造的時候,是會調用string的構造的
	int age;
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章