컴파일 타임에 문자열 리터럴의 길이를 계산하려고합니다. 이를 위해 다음 코드를 사용하고 있습니다.
#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
함수가 컴파일 시간에 평가된다는 것이 표준에 의해 보장 됩니까?
이것이 사실이라면 컴파일 시간 문자열 리터럴 계산의 문이 방금 열렸습니다 ... 예를 들어 컴파일 시간에 해시를 계산할 수 있습니다.