如何通过一些计算创建常量数组

时间:2018-11-12 22:34:36

标签: c++

我有验证码

int a[5];
for (int i = 0; i < 5; i++){
    a[i] = i * i;
}

有没有办法使此数组恒定,以便其他代码可以使用它但不能更改它。

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用constexpr函数和std::array

constexpr std::array<int, 5> make_array() {
    std::array<int, 5> a{};
    for (int i = 0; i < 5; i++){
        a[i] = i * i;
    }
    return a;
}
//...
const std::array<int, 5> a = make_array();

NB。正如@ M.M所指出的那样,此代码仅对C ++ 17有效,因为在C ++ 17之前,数组上的operator[]不是constexpr

答案 1 :(得分:0)

使用现代C ++(array和立即调用的Lambda(IIL)),可以实现以下目的:

const auto a = []() 
{
    std::array< int, 5 > x;

    for (int i = 0; i < 5; i++)
    {
        x[i] = i * i;
    }

    return x;
}(); // IIL

使用lambda优于函数调用,因为您可以将局部变量捕获到lambda中并使用它们,而无需通过参数([&][=]而不是{{1} }。

就像函数一样,lambda可以轻松地内联到您的代码中,因此不会有开销。