c++ - 如何使用函数的输出初始化 const 数组结构字段?
问题描述
我有一个包含 const 数组的结构,并希望在构造时将其初始化为特定值。不幸的是,它的内容取决于几个作为参数传递给构造函数的参数,并且需要一个函数来计算数组的内容。
我最想做的事情是这样的:
struct SomeType {
const unsigned int listOfValues[32];
unsigned int[32] processParameters(unsigned int parameter) {
unsigned int arrayValues[32];
for(int i = 0; i < 32; i++) {
arrayValues[i] = i * parameter;
}
return arrayValues;
}
SomeType(unsigned int parameter) : listOfValues(processParameters(parameter)) {
}
};
当然这里有几个问题(不可能从函数返回数组,数据类型不匹配等)。但是,有没有办法做到这一点?
我已经看到其他类似的问题建议为此使用 std::vector ,但是由此产生的堆分配是我的性能预算无法承受的。
解决方案
正如 Nathan 建议的那样,您应该使用std::array
. 这样您仍然可以享受堆栈分配的好处,但现在您可以从副本进行初始化。
using MyArray = std::array<unsigned int, 32>;
const MyArray listOfValues;
MyArray processParameters(unsigned int parameter) {
MyArray arrayValues;
for(int i = 0; i < 32; i++) {
arrayValues[i] = i * parameter;
}
return arrayValues;
}
我从数组数据类型中删除了 const ,因为它不是必需的,因为您的数组已经是 const ,而且使用 const unsigned int 您将无法arrayValues
在运行时设置 的值。
推荐阅读
- android - 为什么我会收到“Gradle task assembleDebug failed with exit code 1”?
- reactjs - React 中选项的唯一键
- sql - SQL 查询以查找一天中有 3 笔交易的人的详细信息
- flutter - 拒绝设置不安全的标头“User-Agent”
- flutter - 有什么方法可以添加 CircularProgressIndicator 以获取响应表单 dio 请求
- java - Swagger Schema - 模式不适用于字符串数组
- r - 基于 glmnet 包最能区分组的变量
- sql - 如何在 TypeORM 中按字符串长度排序?
- javascript - 未捕获的 ReferenceError:未定义 jQuery(Thymeleaf)
- sql - 连接具有不同数据类型的 2 个表