C++【2016-08-18】转载:总结C++中几种结构体初始化的措施

作者:Ac_Von

博客地址:http://www.cnblogs.com/vongang/

章地址:http://www.cnblogs.com/vongang/archive/2011/07/30/2122076.html

组织体能自由组装数据,是千篇一律种植好广泛的多寡打包方法。

当我们定义一个结构体后,没有初始化就下,就会以及垃圾数据,而且这种不当非常麻烦发现。

以编程时对于定义之其他变量,我们尽好且先初始化。

除开使用memset和ZeroMemory之外,有没有出更简短的方法初始化呢?

盖有时候每定义一个结构体,就应用同样赖memset,这样十分烦,同时有时候也需要让结构体中的一部分变量赋一些非0的默认值。

我这边总结三种方法,如果大家发出啊好之艺术,不妨加上去:

1、结构体的构造函数中初始化。

2、继承模板类初始化

3、定义时初始化

平、在结构体构造函数中初始化

每当C++中,结构体与类似在使用上就没有精神上之分别了,所以可以使类构造函数的款型来初始化,如下代码所示:

  struct Stu
 {
  int  nNum;
  bool bSex;
  char szName[20];
  char szEmail[100];

  //构造函数初始化

*  Stu()
  {
nNum = 0;
   bSex = false;
   memset(szName,0,sizeof(szName));
   memset(szEmail,0,sizeof(szEmail));*

  }

* };*

若可能都发现了,如果结构体中有恢宏分子,一个个赋值,相当麻烦。那么您可如此写:

 struct Stu
 {
  int  nNum;
  bool bSex;
  char szName[20];
  char szEmail[100];

  //构造函数初始化
  Stu()
  {
    memset(this,0,sizeof(Stu)); 
    //或者是脚的格式 
    //memset(&nNum,0,sizeof(Stu));

  }
 };

如当结构体中分红了指针,并且指针指向一个堆放内存,那么即使于析构函数着自由,以上就是是当构造函数中初始化。

亚、继承模板类初始化

首先定义一个模板基类:
template <typename T> 
class ZeroStruct 

public: 
    ZeroStruct() 
    { 
        memset(this,0,sizeof(T)); 
    } 
};

尔后定义的布局体都继承给这模板类。 

    struct Stu:ZeroStruct<Stu> 
    { 
        int        nNum; 
        bool    bSex; 
        char    szName[20]; 
        char    szEmail[100]; 
    };

如此这般吧能兑现初始化。

老三、C++定义时初始化

    struct Stu 
    { 
        int        nNum; 
        bool    bSex; 
        char    szName[20]; 
        char    szEmail[100]; 
    }; 

//定义时初始化 
Stu stu1 = {0};

于有些结构体中,第一只成员表示结构体的轻重,那么就是可这么初始化:

 struct Stu
 {
int nSize; //结构体大小
  int  nNum;
  bool bSex;
  char szName[20];
  char szEmail[100];
 };

 Stu stu1 = {sizeof(Stu),0};

背后的0,可以看看略掉,直接写成:Stu stu1 =
{sizeof(Stu)};后面自动会用0填充。

总分析:

如上三种,是据我所知的初始化结构体方法。

前方两种,实际上已拿结构体给类化了,和类的下多。第三种,是纯的结构体的写法。

如若用仅仅限定为结构体,我建议并非加上构造函数,也休想继续给良模板类,因为是时结构体实际上都是相近了。在概念结构体时,将无法用第三种植艺术去初始化,当然,此时呢不需要初始化了。

看看微软定义之结构体,基本上还未曾构造函数和析构函数。因为结构体的义大鲜明,它仅是本着数据的一个装进,如果长了章程,其义就是更换了。