编译时字符串长度计算:它真的是 constexpr 吗?
在尝试在编译时计算字符串长度时,一部分代码利用递归函数(长度)来实现这一点。然而,关于在编译时对该函数进行保证评估的问题出现了。
该标准没有明确要求 constexpr 函数在编译时进行评估。尽管如此,C 标准草案第 5.19 节中的一项非规范性注释表明,常量表达式可能会在翻译过程中进行求值。
为了确保编译时求值,可以将结果分配给 constexpr 变量。正如 Bjarne Stroustrup 所说:
“除了能够在编译时计算表达式之外,我们还希望能够要求在编译时计算表达式;变量定义前面的 constexpr 可以做到这一点(并暗示 const)。”
例如:
<code class="cpp">constexpr int len1 = length("abcd");</code>
此外,Stroustrup 概述了保证编译时评估的具体条件:
因此,虽然仅声明 constexpr 函数并不能保证编译时评估、将其结果分配给 constexpr 变量或在适当的上下文中使用它可以确保这一点。
以上是constexpr 函数能否保证编译时字符串长度计算?的详细内容。更多信息请关注PHP中文网其他相关文章!