I pracy z C++ 11 i posiadają klasę zawierającą następujące struktury:Inicjalizacja struct zawierający const tablicę z listy inicjatora
struct Settings{
const std::string name;
const std::string* A;
const size_t a;
};
class X {
static const Settings s;
//More stuff
};
W pliku .cpp
Chcę określić to tak
X::s = {"MyName", {"one","two","three"}, 3};
Ale to nie działa. Jednak działa z użyciem zmiennej pośredniej. Czy istnieje sposób, aby to zrobić bez zmiennej pośredniej?
Twój struct * nie zawiera * stałej tablicy. Zawiera wskaźnik do ciągu stałego. Mając to na uwadze, powinno być łatwo zrozumieć, dlaczego potrzebujesz "zmiennej pośredniej". – juanchopanza
@juanchopanza: Cóż, chcę, żeby 'A' wskazywało (początek) stałą tablicę. Może to być również wskaźnik do 'const std :: string', ale nie tego chcę. Ale może nie rozumiem tego, na co się zwracasz ... – Haatschii
@Haatschii: mylisz fakt, że tablica rozpada się na wskaźnik z myślą, że tablica i wskaźnik są identyczne. Pod względem semantyki języka tablica nie jest wskaźnikiem. Podobnie lista inicjalizacyjna nie jest tablicą. Kompilator może zainicjować tablicę z taką listą i może zepsuć tablicę do wskaźnika, ale nie wie w twoim przykładzie, aby przekształcić listę w tablicę, a następnie zepsuć ją do wskaźnika. Stąd potrzeba pośrednika, aby przekonwertować listę inicjalizującą na ciągłą tablicę przed przypisaniem do wskaźnika. –