Nepotřebuju nic debugovat, abych věděl, že se to v runtime inicializovat bude z mnoha důvodů:
1. Není to const, compiler musí vytvořit storage a celou strukturu inicializovat, protože se to může kdykoliv změnit.
2. I kdyby to const bylo, stejně se to bude inicializovat, protože konstruktor string_view je constexpr basic_string_view(const CharT* s), musí to spočítat délku s. Mohlo by to být bez inicializace v runtime, kdyby to celé bylo constexpr, ale není.
3. Konstruktor string_view není noexcept, takže teoreticky může vyhodit výjimku, pokud by se to stalo, musí to vyhodit výjimku i v runtime, nejde to optimalizovat. Kdyby to celé bylo constexpr, tak to může vyhodit výjimku v compile time, což by spadlo už během kompilace, takže s constexpr by to mohlo být bez inicializace v runtime.
Jak už jsem psal, měl bys dostudovat constexpr, nemáš úplně jasno v tom, k čemu to je a co to dělá. Od C++20 budou constexpr i knihovní funkce včetně std::sort, takže i taková věc jako std::array<std::pair<std::string_view, std::string_view>> půjde elegantně setřídit v compile time.
Intenzivně se zabývám programováním zejména v jazyce C++. Vyvíjím vlastní knihovny, vzory, techniky, používám šablony, to vše proto, aby se mi usnadnil život při návrhu aplikací. Pracoval jsem jako programátor ve společnosti Seznam.cz. Nyní jsem se usadil v jednom startupu, kde vyvíjím serverové komponenty a informační systémy v C++
Přečteno 51 063×
Přečteno 23 939×
Přečteno 22 871×
Přečteno 20 952×
Přečteno 17 760×