Kopieren Sie die Initialisierung der geschweiften Klammern des Konstruktors

"Wir können Objekte einer Klasse, für die wir keinen Konstruktor definiert haben, initialisieren mit:

memberwise Initialisierung.Kopierinitialisierung.Standardinitialisierung.

Zum Beispiel:

    struct Work {
      string author;
      string name;
      int year;
    };

    Work s9 { "Bethoven",
              "Symphony No. 9 in D minor, Op. 125; Choral",
              1824
            };                    // memberwise initialization

    Work currently_playing {s9};  // copy initialization
    Work none {};                 // default initialization

Die C ++ - Programmiersprache 4th Ed. Kapitel 17.3.1

Zum Beispiel:

   struct Data
     {
        int mMember1;
        float mMember2;
        char mMember3;
     };

     int main()
     {
         Data aData_1{1,0.3,33};
         Data aData_2{aData_1};

         return EXIT_SUCCESS;
     }

Das muss funktionieren, auch wenn ich bei GCC genauso einen Compilerfehler bekomme wie bei Clang. Der Fehler lautet in beiden Compilern "Daten können nicht in int konvertiert werden". Beim Implementieren des Kopierkonstruktors verschwindet dieser Fehler jedoch oder wird nicht implementiert, sondern es wird die Syntax runder Klammern verwendet. Das Problem ist ein wenig dumm und durch Ändern der Locke für die runden Klammern wird das Problem gelöst. Aber warum werden die Regeln von TC ++ PL nicht befolgt? Ist ein Compilatorproblem oder ich verstehe etwas falsch? Danke im Voraus.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage