c++ 复杂结构体初始化

最近在写代码定义结构体时遇到初始化的问题,针对c++11发现可以用下面的方法的初始化:

1. 定义结构体的时候直接赋值

在定义结构体数组时直接赋值初始化

typedef struct SScrollViewItem {NcString* iconPath = NULL;uint32 itemMsgId = 0;BOOL isSelected = FALSE;BOOL Disable = FALSE;} SScrollViewItem;

2. 构造函数初始化

c++结构体可以有构造函数、成员函数等,对于上面那种也可以在构造函数中用 memset 来初始化:

typedef struct SScrollViewItem {NcString* iconPath = NULL;uint32 itemMsgId = 0;BOOL isSelected = FALSE;BOOL Disable = FALSE;SScrollViewItem() {memset(this, 0, sizeof(*this));}} SScrollViewItem;

但是这种方法对有变量、数组、vector容器等嵌套的复杂结构体,类似下面这种就容易出错:

typedef struct tagDataInfo {long offs;                // 索引char name[20];            // 姓名std::list ord_list;  // 定单索引列表std::map str_map; // 编号对应管理
} DataInfo;

正确初始化的写法如下:

typedef struct tagDataInfo {long offs;                // 索引char name[20];            // 姓名std::list ord_list;  // 定单索引列表std::map str_map; // 编号对应管理tagDataInfo() : offs(0) {memset(name, '0', sizeof(char) * 20);ord_list.clear();str_map.clear();};
} DataInfo;

具体原因详见 https://blog.csdn.net/changqing5818/article/details/78523299


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部