Berechnung der Zeichenfolgenlänge zur Kompilierungszeit
Um die Länge eines Zeichenfolgenliterals zur Kompilierungszeit zu berechnen, verwendet das folgende Codefragment eine rekursive Funktion:
<code class="cpp">#include <cstdio> int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; } int main() { printf("%d %d", length("abcd"), length("abcdefgh")); }</code>
Diese Funktion berechnet erfolgreich die Längen wie erwartet, wie durch den generierten Assemblercode von clang belegt, der die Ergebnisse zeigt, die zur Kompilierungszeit berechnet werden.
Standardgarantie für Auswertung zur Kompilierungszeit
Es ist jedoch wichtig zu beachten, dass die Auswertung konstanter Ausdrücke zur Kompilierungszeit vom Standard nicht ausdrücklich garantiert wird. Der C-Standardentwurf Abschnitt 5.19 enthält zwar ein nicht normatives Zitat, das besagt, dass konstante Ausdrücke während der Übersetzung ausgewertet werden können, dies stellt jedoch keine endgültige Garantie dar.
Gewährleistung der Kompilierungszeitauswertung
Um sicherzustellen, dass eine Funktion zur Kompilierzeit ausgewertet wird, empfiehlt Bjarne Stroustrup, ihr Ergebnis einer constexpr-Variablen zuzuweisen. Dies ist im folgenden Beispiel zu sehen:
<code class="cpp">constexpr int len1 = length("abcd");</code>
Zusätzlich skizziert Bjarne Stroustrup zwei spezifische Fälle, in denen eine Auswertung zur Kompilierungszeit garantiert ist:
Daher ist es für eine zuverlässige Auswertung zur Kompilierungszeit ratsam, Folgendes zu befolgen einer dieser beiden Ansätze.
Das obige ist der detaillierte Inhalt vonWie können wir die Auswertung der Stringlänge zur Kompilierungszeit garantieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!