Deklaration int anzahl = 0 oder int anzahl {0}



  • Guten Tag,
    gibt es einen unterschied ob ich int so deklariere

    int anzahl {0};
    

    oder

    int anzahl = 0;
    


  • Ja: das erste funktioniert in älteren C++-Standards (vor 2011) nicht.

    Wahrscheinlich willst du das aber so nicht wissen. Spannender ist es, wenn du Dinge hast, die nicht passen:

    char x = 1234;
    char x {1234};
    

    Zeile 1 kompiliert (und verursacht eine Warnung), Zeile 2 kompiliert nicht.



  • @KogoroMori21 In deinem konkreten Beispiel mit int als Typ: Nein.

    Allerdings handelt es sich im ersten Fall um Direct initialization und im zweiten Fall um Copy initialization die sich in bestimmten Fällen sehr wohl unterscheidlich verhalten können. So werden u.A. im zweiten Fall für einen Klassen-Typen nur die nicht-expliziten Konstruktoren berücksichtigt, während mit der ersten Variante auch als explicit deklarierte Konstruktoren aufgerufen werden können (für genauere Infos folge den Links). Falls dir das zu kompliziert wird, kannst du dir zumindest vorerst merken, dass beide Varianten so ziemlich dasselbe sind - bis du mit den Unterschieden etwas anfangen kannst - für eventuelle Prüfungsfragen solltest du natürlich die genauen unterscheide kennen 🙂

    Eine vielleicht nicht ganz intuitive Erkenntnis ist auch, dass es sich hier in beiden Fällen tatsächlich um eine Initialisierung handelt, und eventuelle Zuweisungsoperatoren nicht aufgerufen werden - bei dem = könnte man das nämlich eventuell vermuten.



  • @KogoroMori21 Das ist eine Definition (mit impliziter Deklaration)


Log in to reply