编译时计算字符串长度
为了在编译时计算字符串文字的长度,下面的代码片段使用了递归函数:
<code class="cpp">#include <cstdio> int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; } int main() { printf("%d %d", length("abcd"), length("abcdefgh")); }</code>
此函数成功计算了预期的长度,从 clang 生成的汇编代码可以证明这一点,它显示了在编译时计算的结果。
标准保证编译时求值
但是,值得注意的是,标准并未明确保证编译时常量表达式的求值。虽然 C 标准草案第 5.19 节确实包含一个非规范引用,指出可以在翻译过程中评估常量表达式,但这并不能提供明确的保证。
确保编译时评估
为了确保在编译时计算函数,Bjarne Stroustrup 建议将其结果分配给 constexpr 变量。这可以在以下示例中看到:
<code class="cpp">constexpr int len1 = length("abcd");</code>
此外,Bjarne Stroustrup 概述了保证编译时评估的两种特定情况:
因此,为了可靠的编译时评估,建议遵循这两种方法中的任何一种。
以上是我们如何保证字符串长度的编译时评估?的详细内容。更多信息请关注PHP中文网其他相关文章!