在C++中初始化构造函数初始值设定项列表中的结构

initialize a structure in constructor initializer list in C++

本文关键字:列表 结构 初始化 C++ 构造函数      更新时间:2023-10-16

//我有一个结构

 typedef struct
 {
    uint8_t* data;
    uint16_t data_ln;
 } Struc_Data;

//从该结构派生的类型

 Struc_Data    tx_struct;

//我必须在构造函数初始化器列表中初始化这个"tx_struct",我不知道

 Constr::Constr( ):
    tx_struct  (reinterpret_cast<uint8_t*>(nullptr), 0U)  //this does not work
 {
 }

Struc_Data是一个聚合,因此如果您想对成员进行零初始化,则需要进行值初始化:

Constr::Constr( ): tx_struct() {} // or tx_struct{}

否则,使用大括号初始化:

Constr::Constr( ): tx_struct{nullptr, 42U} {}

下面是一个简化的编译示例:

#include <stdint.h>
typedef struct
{
  uint8_t* data;
  uint16_t data_ln;
} Struc_Data;
struct Foo
{
  Foo() : tx_struct{nullptr, 0U} {}
  Struc_Data tx_struct;
};

注意,在C++中,对类定义使用typedef语法是不常见的。首选形式是

struct Struc_Data { .... };

另一个解决方案:

  1. 将C样式结构更改为C++样式结构
  2. 使用必需的参数定义构造函数。

    struct Struc_Data
    {
      Struc_Data(uint8_t* data1, uint16_t data2) : data(data1), data_In(data2) {}
      uint8_t* data;
      uint16_t data_ln;
    };