c 結構體初始化未生效

2021-09-23 20:21:14 字數 587 閱讀 8628

在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

string name;//name不初始化不會影響結果,因為string是有建構函式的,

//在ststudent構造的時候,是會呼叫string的構造的

int age;

};

C 結構體初始化

今天在看mfc結構時,順便看了看 深入淺出mfc 發現有這麼一行 m pmainwnd new cmyframewnd 乍一看,很正常啊,再仔細一看,貌似 new cmyframewnd 的時候少了一對括號。奇怪!之後又翻了翻書,發現好多處都是這樣的。難道我弄錯了,不可能啊,一般情況下在new乙個新...

c 結構體初始化

在 系統程式設計師成長計畫 看到的,好像有點道理。宣告 struct s 習慣的初始化 struct s h 這種初始化是按結構體成員宣告的順序進行初始化的,即利用了struct記憶體布局的方法。若struct成員順序被修改了,初始化將引入隱患。幸運的話會收到編譯器的warning或error,否則...

C 結構體初始化

結構體初始化的三種方式 方式1using namespace std struct student int main void printf kyrie的名字 s 手機號 s 年齡 d n kyrie.name,kyrie.phone.c str kyrie.age return0 方式2 有的編譯...