Deklarieren von Zeichenfolgen zur Kompilierzeit Concisley in C
Einführung
In C Deklarieren von Zeichenfolgen zur Kompilierzeit , die während der Kompilierung konstant bleiben, können sich als umständlich erweisen. Herkömmliche Ansätze erfordern die Angabe einer verschiedenen Zeichenfolge:
using str = sequence<'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!'>;
Bestehende Ansätze: Herausforderungen und Einschränkungen
Idealerweise sollte die Deklaration von Zeichenfolgen zur Kompilierungszeit einfacher sein, wie zum Beispiel:
using str1 = sequence<"Hello, world!">; constexpr auto str2 = "Hello, world!"_s;
Diese Ansätze stehen jedoch im Widerspruch Hindernisse:
Lösung: str_const-Bibliothek
Seit Scott Schurrs Präsentation auf der C Now 2012 bietet die str_const-Bibliothek eine praktische Lösung:
constexpr str_const my_string = "Hello, world!"; static_assert(my_string.size() == 13); static_assert(my_string[4] == 'o'); constexpr str_const world(my_string, 7, 5); static_assert(world == "world");
Diese Lösung bietet Vorteile wie constexpr-Bereichsprüfung und flexibles Abrufen von Teilzeichenfolgen, ohne dass dies erforderlich ist Makros.
Update: C 17 und std::string_view
In C 17 bietet std::string_view eine ähnliche Lösung:
constexpr std::string_view my_string = "Hello, world!"; static_assert(my_string.size() == 13); static_assert(my_string[4] == 'o'); constexpr std::string_view world(my_string.substr(7, 5)); static_assert(world == "world");
Dieser Ansatz bietet die folgenden Vorteile:
Das obige ist der detaillierte Inhalt vonWie kann ich Kompilierungszeitzeichenfolgen in C präzise deklarieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!