Derleme zamanında bir dizgenin uzunluğunu hesaplamaya çalışıyorum. Bunu yapmak için aşağıdaki kodu kullanıyorum:
#include <cstdio>
int constexpr length(const char* str)
{
return *str ? 1 + length(str + 1) : 0;
}
int main()
{
printf("%d %d", length("abcd"), length("abcdefgh"));
}
Her şey beklendiği gibi çalışır, program 4 ve 8'i yazdırır. Clang tarafından oluşturulan derleme kodu sonuçların derleme zamanında hesaplandığını gösterir:
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
Sorum: length
fonksiyonun derleme zamanı değerlendirileceği standart tarafından garanti ediliyor mu?
Bu doğruysa, derleme zamanı dizesi değişmezleri hesaplamaları için kapı az önce açıldı ... örneğin, derleme zamanında hash'leri hesaplayabilirim ve daha pek çok şey ...