C++ 编译时生成的数组

C++ 编译时生成的数组,c++,arrays,metaprogramming,C++,Arrays,Metaprogramming,我想在编译时创建一个数组。 问题是,它将是巨大的(intarr[8000000]),因此使用变量或嵌套结构的递归将不起作用。全局数组必须在创建时初始化,它不是一个简单的填充{0}。有人知道怎么做吗?关于这篇文章,假设我想要arr[i]=i。您可以使用constexpr函数,类似于: constexpr auto make_huge_array() { std::array<int, 8'000'000> res{}; std::size_t i = 0; f

我想在编译时创建一个数组。
问题是,它将是巨大的(intarr[8000000]),因此使用变量或嵌套结构的递归将不起作用。全局数组必须在创建时初始化,它不是一个简单的填充{0}。有人知道怎么做吗?关于这篇文章,假设我想要arr[i]=i。

您可以使用
constexpr
函数,类似于:

constexpr auto make_huge_array()
{
    std::array<int, 8'000'000> res{};

    std::size_t i = 0;
    for (auto& e : res) {
         e = i++;
    }
    return res;
}
constexpr自动生成巨大数组()
{
std::数组res{};
标准:尺寸i=0;
用于(自动和电气:分辨率){
e=i++;
}
返回res;
}

编写一个脚本,将数组生成为头文件并包含在其他地方?我怀疑在静态内存中放置8000000 int不是一个好主意。也许从文件加载?@Zinki对于8000000个元素,它不能在括号中初始化,递归深度是它的拦截器variadics@freakish我需要它在一个文件中,我会将它添加到post@Farkor123这是一个奇怪的要求。我们讨论的C++版本是什么?代码>constexpr在C++14中循环也是一个有效的选项。不,“constexpr中未初始化的res”错误。即使您初始化了它,它也是“调用非constexpr函数std::array::value_type*std::array::begin()”错误:/@Farkor123:Fixed,只需先初始化数组即可。添加了演示。请注意,这需要C++17。