首页 > 解决方案 > 如何使用函数的输出初始化 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 ,但是由此产生的堆分配是我的性能预算无法承受的。

标签: c++c++11

解决方案


正如 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在运行时设置 的值。


推荐阅读