Berechnung der Zeichenfolgenlänge zur Kompilierungszeit: Ist es wirklich constexpr?
Bei einem Versuch, die Zeichenfolgenlänge zur Kompilierungszeit zu berechnen, wurde ein Teil von Code verwendet dazu eine rekursive Funktion (Länge). Es stellen sich jedoch Fragen hinsichtlich der garantierten Auswertung dieser Funktion zur Kompilierungszeit.
Der Standard schreibt nicht ausdrücklich vor, dass constexpr-Funktionen zur Kompilierungszeit ausgewertet werden. Dennoch deutet ein nicht normativer Hinweis im Entwurf des C-Standards, Abschnitt 5.19, darauf hin, dass konstante Ausdrücke während der Übersetzung einer Auswertung unterzogen werden können.
Um die Auswertung zur Kompilierungszeit sicherzustellen, kann man das Ergebnis einer constexpr-Variablen zuweisen. Wie von Bjarne Stroustrup erklärt:
"Zusätzlich zur Möglichkeit, Ausdrücke zur Kompilierungszeit auszuwerten, möchten wir auch verlangen können, dass Ausdrücke zur Kompilierungszeit ausgewertet werden; constexpr vor einer Variablendefinition tut dies ( und impliziert const). Es ist ein konstanter Ausdruck erforderlich, beispielsweise in einer Array-Grenze.
Initialisierung einer constexpr-Variablen mit dem Ergebnis der Funktion.
<code class="cpp">constexpr int len1 = length("abcd");</code>
Daher ist die bloße Deklaration einer constexpr-Funktion keine Garantie Dies wird durch die Auswertung zur Kompilierungszeit, die Zuweisung des Ergebnisses zu einer constexpr-Variablen oder die Verwendung in einem geeigneten Kontext sichergestellt.
Das obige ist der detaillierte Inhalt vonKönnen constexpr-Funktionen die Berechnung der Zeichenfolgenlänge zur Kompilierungszeit garantieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!