Sto cercando di calcolare la lunghezza di una stringa letterale in fase di compilazione. Per farlo sto usando il seguente codice:
#include <cstdio>
int constexpr length(const char* str)
{
return *str ? 1 + length(str + 1) : 0;
}
int main()
{
printf("%d %d", length("abcd"), length("abcdefgh"));
}
Tutto funziona come previsto, il programma stampa 4 e 8. Il codice assembly generato da clang mostra che i risultati vengono calcolati in fase di compilazione:
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
La mia domanda: è garantito dallo standard che la length
funzione verrà valutata in fase di compilazione?
Se questo è vero, la porta per i calcoli dei valori letterali delle stringhe in fase di compilazione si è appena aperta per me ... per esempio posso calcolare gli hash in fase di compilazione e molti altri ...