我正在尝试在编译时计算字符串文字的长度。为此,我使用以下代码:
#include <cstdio>
int constexpr length(const char* str)
{
return *str ? 1 + length(str + 1) : 0;
}
int main()
{
printf("%d %d", length("abcd"), length("abcdefgh"));
}
一切正常,程序输出4和8。clang生成的汇编代码表明结果是在编译时计算的:
0x100000f5e: leaq 0x35(%rip), %rdi ; "%d %d"
0x100000f65: movl $0x4, %esi
0x100000f6a: movl $0x8, %edx
0x100000f6f: xorl %eax, %eax
0x100000f71: callq 0x100000f7a ; symbol stub for: printf
我的问题:标准是否保证length
函数将在编译时进行评估?
如果这是真的,那么编译时间字符串文字计算的大门就为我打开了。例如,我可以在编译时计算哈希,等等。