Berechnen der Länge eines C-Strings zur Kompilierungszeit. Ist das wirklich ein Constexpr?C++

Programme in C++. Entwicklerforum
Anonymous
 Berechnen der Länge eines C-Strings zur Kompilierungszeit. Ist das wirklich ein Constexpr?

Post by Anonymous »

Ich versuche, die Länge eines String-Literals zur Kompilierungszeit zu berechnen. Dazu verwende ich folgenden Code:

Code: Select all

#include 

int constexpr length(const char* str)
{
return *str ? 1 + length(str + 1) : 0;
}

int main()
{
printf("%d %d", length("abcd"), length("abcdefgh"));
}
Alles funktioniert wie erwartet, das Programm gibt 4 und 8 aus. Der von clang generierte Assembler-Code zeigt, dass die Ergebnisse zur Kompilierungszeit berechnet werden:

Code: Select all

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
Meine Frage: Ist durch den Standard garantiert, dass die Länge-Funktion zur Kompilierungszeit ausgewertet wird?

Wenn das wahr ist, hat sich für mich gerade die Tür für die Berechnung von String-Literalen zur Kompilierungszeit geöffnet ... zum Beispiel kann ich Hashes zur Kompilierungszeit berechnen und vieles mehr ...

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post