Array initialization mit Designator?
-
http://en.cppreference.com/w/c/language/array_initialization
Die obige Seite enthält im Bereich Example folgendes Snippet:// Character names can be associated with enumeration constants // using arrays with designators: enum { RED, GREEN, BLUE }; const char *nm[] = { [RED] = "red", [GREEN] = "green", [BLUE] = "blue", };
Mir war diese Funktionalität ("Designators") nicht bekannt.
Im entsprechenden Kasten unter "A designator causes the following initializer to initialize of the array element described by the designator. "
Steht "since C99".Aber wenn ich das Beispiel mit Visual C++ 2013 probiere compiliert es nicht.
(Syntax error bei [RED] = "red", )Weiss jemand besser Bescheid zu diesem Feature und Unterstützung in VC2013?
-
Oh, mir fällt gerade wie Schuppen von den Augen dass es sich um ein C Feature handelt, nicht C++.
Sorry, wurde durch "cppreference" geblendet und hab nicht weiter nachgedacht.Wir geht das obige schnellsten geschrieben in C++?
-
#include <array> enum class Color{ RED, GREEN, BLUE, max }; const std::array<const char*, static_cast<std::size_t>(Color::max)> nm{ "red", "green", "blue" };
Beachte aber hier, dass Colors dann natürlich auch mit 0 beginnen müssen (tun sie per default) und continuous sein müssen; d.h. du darfst nicht einfach mal eine value überspringen. Color::max würde hier natürlich über das Ziel hinaus schießen.
Solltest du c++17 verwenden, kannst du statt const char* auch super std::string_view verwenden
-
Ich verstehe nicht, wieso Du ein Array und keine Klasse einsetzt, wenn jedes Element einen Namen hat?