Frage zu statischem Array



  • Hallo, ich habe eine kurze Frage. Ist durch den Standard abgesichert, dass dieser Code

    Typ name[konstander_ausdruck] = {};
    

    das komplette Array mit Nullen initialisiert, oder ist das ein Feature meines Compilers? (GCC)


  • Mod

    Weder noch. Wenn dein Array aus plain old data (also die eingebauten einfachen Datentypen) besteht, dann werden die Elemente mit 0 initialisiert. Allgemein gesagt werden die Werte aber value-initialized (hat jemand eine deutsche Übersetzung dafür?) was bei komplizierteren Gebilden auch etwas anderes bedeuten kann als das Setzen auf 0.

    edit: Und bevor jetzt die Frage kommt, was das mit der value initialization genau bedeutet: C++ Standard, Kapitel 8.5, Vers 5



  • SeppJ schrieb:

    value-initialized (hat jemand eine deutsche Übersetzung dafür?)

    Nö, wozu auch? Der Standard schreibt genau vor, was value-initialized ist, und wenn das jetzt verschiedene Leute verschieden ins Deutsche übersetzten und dann, ums im Standard nachzuschlagen, wieder anders ins englische, weiß niemand mehr wovon die Rede ist.



  • Auf das ich nochmal nach hake:

    C++ Standard schrieb:

    if T is a class type (clause 9) with a user-declared constructor (12.1), then the default constructor for T is called
    (and the initialization is ill-formed if T has no accessible default constructor);

    Habe ich das jetzt so zu verstehen das:

    class T
    {
      int i;
      public: 
       T(int ii) i(ii) {}
    };
    
    int main()
    {
      T t = {};    // möglich ist aber (was ist ill-formed ?) ist.
      T tt = {1};  // das ist nicht ill-formed ? 
                   // weil ich einen Default-Konstruktor dafür habe
    }
    

    Ich verstehe das jetzt nicht mit dem Default-Konstruktor.
    ??? 😕 ???



  • Du hast da keinen default c'tor. Das ist ein normaler Konstruktor.

    Der default c'tor ist der ohne Parameter, respektive der, den man ohne Parameter aufrufen kann(also auch welche mit default Parametern). Und ill-formed ist es nach diesem Auszug, wenn kein default c'tor zur Verfügung steht. Man selbst also Konstruktor, aber nicht den default zur Verfügung stellt. (ansonsten wird er ja generiert).


Anmelden zum Antworten