constexpr-Variablen und String-Literale
In C müssen constexpr-Variablen einen Literaltyp haben, was bedeutet, dass sie keine Objekte mit nicht trivialen Destruktoren enthalten können . Beim Versuch, eine constexpr std::string-Variable in C 11 zu definieren, tritt aufgrund des nicht trivialen Destruktors von std::string ein Fehler auf.
Alternative für constexpr-String-Literale
Ab C 20 ist es unter bestimmten Bedingungen möglich, std::string in constexpr-Ausdrücken zu verwenden. Insbesondere muss der std::string am Ende der konstanten Auswertung zerstört werden.
Beispiel:
constexpr std::size_t n = std::string("hello, world").size();
In diesem Beispiel wird der std::string zerstört als Teil des Ausdrucks, der die Größe auswertet, zerstört werden, sodass der Code gültig ist.
String_View Alternative
Eine weitere Option zur Verwendung stringähnlicher Objekte in constexpr-Ausdrücken ist die Verwendung von std::string_view, das in C 17 eingeführt wurde.
Beispiel:
constexpr std::string_view sv = "hello, world";
std::string_view stellt ein stringähnliches Objekt mit unveränderlichem, nicht besitzendem Zugriff auf eine zugrunde liegende Sequenz dar von Charakteren. Es verfügt über keinen nicht-trivialen Destruktor, wodurch es für die Verwendung in constexpr-Ausdrücken geeignet ist.
Das obige ist der detaillierte Inhalt vonKönnen constexpr-Variablen Strings in C enthalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!