Konstante Ausdrucksoptimierung: Kann die Zeichenfolgenlänge zur Kompilierungszeit bestimmt werden?
Auf der Suche nach Codeoptimierung versucht ein Entwickler, die zu berechnen Länge eines String-Literals zur Kompilierungszeit mithilfe einer rekursiven Funktion. Diese Funktion wertet die Zeichenfolge Zeichen für Zeichen aus und gibt die Länge zurück.
Erste Beobachtungen:
Die Funktion scheint wie beabsichtigt zu funktionieren und gibt zur Laufzeit und beim Generieren die richtigen Längen zurück Assembler-Code, der vorschlägt, dass die Berechnung zur Kompilierungszeit erfolgt. Dies wirft die Frage auf:
Ist garantiert, dass die Längenfunktion zur Kompilierzeit ausgeführt wird?
Die Perspektive des Standards:
Konstante Ausdrücke müssen vom C-Standard nicht explizit zur Kompilierungszeit ausgewertet werden. Ein nicht normativer Hinweis deutet jedoch auf diese Möglichkeit hin.
Erzwingen der Ausführung zur Kompilierungszeit:
Um die Auswertung zur Kompilierungszeit sicherzustellen, kann die Funktion einem constexpr zugewiesen werden Variable. Gemäß den C 11-Richtlinien erfordert das Markieren einer Variablen constexpr deren Auswertung zur Kompilierzeit.
Zusätzliche Überlegungen:
Bjarne Stroustrup, der Erfinder von C, fasst die Bedingungen für zusammen Auswertung zur Kompilierungszeit als:
Schlussfolgerung:
Obwohl dies nicht explizit angegeben ist Die standardmäßige Auswertung von Constexpr-Funktionen zur Kompilierungszeit kann durch die Verwendung konstanter Ausdrücke oder die Initialisierung von Constexpr-Variablen gewährleistet werden. Dies eröffnet Möglichkeiten zur Optimierung von Zeichenfolgen und anderen Berechnungen zur Kompilierungszeit und ermöglicht so eine effizientere Codeausführung.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3