Dan*_*ler 5 c++ limits constexpr c++11 c++14
作为一个实验,我只是将一些代码放在一起,以便std::array<uint32_t, 256>在编译时生成.表内容本身是一个相当典型的CRC查找表 - 关于唯一新的事情是使用constexpr函数来计算条目而不是将自动生成的魔术表直接放在源代码中.
无论如何,这个练习让我很好奇:编译器constexpr在编译时评估函数或变量定义的计算量是否会有任何实际限制?例如,像gcc的-ftemplate-depth参数一样,对模板元编程评估的数量创建实际限制.(我也想知道参数包的长度是否存在实际限制 - 这将限制std::array使用std::integer_sequence中间对象创建的编译时的大小.)
对此的建议可以在[implimits] \xc2\xb62中找到:
\n\n\n(2.35) \xc2\xa0 \xe2\x80\x94 \xe2\x80\x82 递归 constexpr 函数调用 [ 512 ]
\n(2.36) \xc2\xa0 \xe2\x80\x94 \xe2\x80\x82 在核心常量表达式中计算的完整表达式 [ 1 048 576 ]
\n
GCC 和 Clang 允许通过-fconstexpr-depth(这是您正在寻找的标志)进行调整。
常量表达式求值实际上在沙箱中运行,因为未定义的行为必须被实现抢占。考虑到这一点,我不明白为什么该实现不能使用主机的全部资源。再说一次,我不建议编写编译需要千兆字节内存或其他不合理资源的程序......
\n