在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;
};