gpt4 book ai didi

c++ - 初始化一个固定的 C 数组成员结构

转载 作者:太空狗 更新时间:2023-10-29 20:34:10 27 4
gpt4 key购买 nike

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

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

我有另一个采用二维固定长度数组 const uint32_t(&rArrayArg)[4][5] 的 POD 结构,它将用于初始化相应的 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;
}
};

以下live demo显示将部分填充的固定数组参数 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;
}
};

关于c++ - 初始化一个固定的 C 数组成员结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50332619/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com