gpt4 book ai didi

c++ - constexpr 计算量的实际限制

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:15 28 4
gpt4 key购买 nike

作为实验,我只是将一些代码放在一起生成一个 std::array<uint32_t, 256>在编译时。表内容本身是一个相当典型的 CRC 查找表 - 唯一的新事物是使用 constexpr计算条目的函数,而不是将自动生成的魔法表直接放在源代码中。

无论如何,这个练习让我感到好奇:编译器愿意为评估 constexpr 计算的计算量是否有任何实际限制?编译时的函数或变量定义?例如类似于 gcc 的 -ftemplate-depth参数创建对模板元编程评估量的实际限制。 (我还想知道参数包的长度是否存在实际限制 - 这会限制使用 std::array 中间对象创建的编译时 std::integer_sequence 的大小。)

最佳答案

关于此类的建议可以在 [implimits] ¶2 中找到:

(2.35)   —   Recursive constexpr function invocations [512]

(2.36)   —   Full-expressions evaluated within a core constant expression [1 048 576]

GCC 和 Clang 允许通过 -fconstexpr-depth(这是您正在寻找的标志)进行调整。

常量表达式计算实际上在沙箱中运行,因为 undefined behavior must be preempted by the implementation .考虑到这一点,我不明白为什么实现不能使用主机的全部资源。再说一次,我不建议编写编译需要 GB 内存或其他不合理资源的程序...

关于c++ - constexpr 计算量的实际限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38060007/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com