W this comment to another question The HVD użytkownik stwierdził, co następuje:Czy tablice mogą być indeksowane podczas kompilacji?
... chociaż literały łańcuchowe mogą być przekazywane do
constexpr
funkcji, i indeksowania tablicy jest dozwolone na napisowych w stałym wyrażeń operacji indeksowania na zasadzieconstexpr
parametr funkcji nie kwalifikuje się jako wyrażenie stałe.
Nie do końca rozumiem, o co chodziło. Czy to znaczy, że zmienna w następującym kodzie hash_value
#include <cstddef>
// Compute the hash of a string literal adding the values of its characters
template<std::size_t N> constexpr std::size_t
hash_string
(const char (& s)[N])
noexcept
{
std::size_t h = 0;
// Array indexing happening under the hood
for (const auto c : s)
h += c;
return h;
}
constexpr auto hash_value = hash_string("Hello, world!");
nie może być oceniana w czasie kompilacji? Czy mógłbyś rozwinąć cytowany komentarz i powiedzieć, czy mam rację?
Nie widzę niczego w standardzie C++ 14, który zabrania tego. Twój kod świetnie się komplikuje. –
Czy wiele kompilatorów tworzy taką optymalizację? To wydaje się bardzo agresywne. – tadman
@ T.C. Tak, kompiluje się i działa dobrze dla mnie też na Clangu. Jednak szczególnie, ponieważ nie znam zespołu, chcę się upewnić, że jest on oceniany podczas kompilacji. – Kalrish