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 😉


  • Mod

    Ich verstehe nicht, wieso Du ein Array und keine Klasse einsetzt, wenn jedes Element einen Namen hat?


Log in to reply