初始化固定的C数组成员结构

johnco3

我有一个非常简单的POD结构,其中包含如下所示的数组成员。我在memberArray使用参考固定长度数组参数初始化固定长度数组成员时遇到问题const uint32_t(&rArrayArg)[22]在最终目标环境中,我将无法访问标准库。

成员初始化器memberArray{*rArrayArg}仅从rArrayArgarg复制第一个条目为了查看完整的数组,我需要在构造函数的主体中使用memcpy或(如此处所示)std :: copy。

我还有另一个采用二维固定长度数组的POD结构,该数组const uint32_t(&rArrayArg)[4][5]将用于初始化相应的2d成员,因此,首选成员初始化语法的通用解决方案。

struct TestStruct {
    explicit TestStruct(
        const uint32_t(&rArrayArg)[22])
        : memberArray{*rArrayArg}
    {
        //std::copy(std::cbegin(rArrayArg), std::cend(rArrayArg), memberArray);
    }

    uint32_t memberArray[22];

    // this stream helper is only present for debugging purposes
    // in the actual target environment, I will not have access to std:: 
    friend std::ostream& operator<<(std::ostream& os, const TestStruct& rhs) {
        os << "TestStruct: ";
        for (auto next : rhs.memberArray) {
            os << next << ",";
        }
        return os;
    }
};

以下实时演示显示了将部分填充的固定数组参数uint32_t fixedLenArg[22] = {1,2,3,4,5,6};传递给显式构造函数的结果。打印结果显示:

TestStruct: 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

所以很明显只有第一个参数被复制。如果取消注释构造函数主体中的std :: copy(这是调试操作,因为在最终环境中我无权访问std :: copy),我将得到以下信息:

TestStruct: 1,2,3,4,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
行纪

我希望我正确理解了问题,然后应该可以解决:

struct TestStruct {
  constexpr static size_t arraySize = 22;

  explicit TestStruct(const uint32_t(&rArrayArg)[arraySize]) : memberArray() {
    for (size_t i = 0; i < arraySize; ++i)
        memberArray[i] = rArrayArg[i];
  }

  uint32_t memberArray[arraySize];

  // this stream helper is only present for debugging purposes
  // in the actual target environment, I will not have access to std::
  friend std::ostream& operator<<(std::ostream& os, const TestStruct& rhs) {
    os << "TestStruct: ";
    for (auto next : rhs.memberArray) {
      os << next << ",";
    }
    return os;
  }
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么使用灵活的数组成员进行的结构初始化无效但对于固定大小的数组成员却有效?

使用std :: index_sequence初始化具有固定大小数组成员的POD结构容器

如何初始化具有 unint_t 作为灵活数组成员的结构?

如何通过引用初始化函数内部的结构数组成员

弹性数组成员的非静态初始化?

灵活数组成员的静态初始化

数组成员的初始化程序无效

将初始化列表传递给C ++中的数组成员

C ++中的struct char数组成员初始化

初始化列表中的零初始化数组成员

继承:构造函数,在C ++ 11中初始化C之类的基类的数组成员

在编译时初始化灵活的数组成员

初始化struct数组成员的最有效方法?

为什么灵活数组成员的静态初始化有效?

数组成员可以自引用初始化吗?

删除类的复制构造函数时,初始化类的数组成员

为什么在构造函数初始化程序中初始化 const char 数组成员不兼容?

当将值分配给结构初始化程序中的字符串数组成员时,为什么会收到“ int-conversion”警告?

为什么需要在constexpr类中成员初始化非静态数组成员?

通过基类构造函数从驱动类模板值初始化基类数组成员变量

在类模板中使用条件运算符初始化静态constexpr char数组成员

在可变参数模板类的构造函数中初始化元组成员

C#数组成员

具有灵活数组成员的结构的“数组”

什么是结构中的灵活数组成员?

与具有柔性数组成员的匿名结构联合

未命名结构的灵活数组成员

具有数组成员的结构

具有灵活数组成员的结构的大小