Var inner- o. außerhalb Schleife deklarieren o. egal? [gelöst]



  • Hallo Gemeinschaft,

    besteht zwischen den beiden folgenden Möglichkeiten ein Unterschied, oder macht der Compiler aus beiden dasselbe?

    // Variante 1:
    for(i=0; i<ListLänge; i++)
    {
       AnsiString Eintrag= Wert[0][i];
       //...
       ListBox1->Items->Add(Eintrag);
    }
    
    // Variante 2:
    AnsiString Eintrag;
    for(i=0; i<ListLänge; i++)
    {
       Eintrag= Wert[0][i];
       //...
       ListBox1->Items->Add(Eintrag);
    }
    

    Und warum wird Variante 1 nicht mit Zeilenangaben angezeigt?



  • Der unterschied ist ist das bei Variante 2 "Eintrag" nach der schleife noch vorhanden ist, wärend bei Variante 1 bei jedem durchlauf "Eintrag" im speicher neu angelegt wird;



  • v2 ist "billiger", weil nicht ständig eine neue AnsiString-Instanz erstellt und zerstört werden muss. Wenn Wert[][] ein AnsiString-Array ist, dann wäre das hier noch "billiger":

    for(i=0; i<ListLänge; i++)
      ListBox1->Items->Add(Wert[0][i]);
    

    Zeilennummern gibt es erst ab 8 Zeilen.



  • Ok, Danke Ihr beiden, so hatte ich mir das auch gedacht. 🙂

    Meine Idee war nur, dass der Copiler mitbekommt dass Variante 1 blöd ist und es optimiert. Das hätte für mich einfach die Einsparung einer Codezeile bedeutet. 😉

    @Jansen: Ja, es ist eine AnsiString-Array, aber ich bearbeite "Eintrag" zwischendurch noch.

    Zeilennummern erst ab 8? Wer denkt sich sowas aus??? Aber gut zu wissen 👍


Anmelden zum Antworten