Werteübergabe



  • Hallo,

    ich bin gerade dabei c++ zu lernen und stolpere über die Parameterübergabe bei Funktionen/Methoden - was ist erlaubt und was nicht.

    Das Beispiel unten ist zwar mit QT programmiert, sollte aber trotzdem ein Standardproblem darstellen.

    An die Funktion "getList" wird eine Referenz auf eine Liste übergeben. In der Funktion wird die Liste gefüllt.

    Die QStrings in der Methode sind ja eigentlich lokal. Trotzdem funktioniert das Beispiel - bei mir.

    Warum funktioniert das? Werden die Werte kopiert und damit im umfassenden Block bekannt gemacht?

    #include <QtCore/QCoreApplication>
    
    #include <QString>
    #include <QDebug>
    #include <QList>
    
    void getList(QList<QString>& l)
    {
        l.append(QString("1"));
        l.append(QString("2"));
        l.append(QString("3"));
        l.append(QString("4"));
        l.append(QString("5"));
        l.append(QString("6"));
        l.append(QString("7"));
    }
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        QList<QString> l;
    
        getList(l);
    
        for (int i = 0; i < l.count(); i++)
        {
            qDebug() << i << l[i];
        }
    
        return a.exec();
    }
    

  • Mod

    Ja, append (und auch alle anderen Methoden zum Füllen von STL-Containern) machen Kopien (oder mindestens ein move). Und das ist auch gut so, sonst wären sie ziemlich nutzlos.



  • Das & bedeutet, dass Du die Liste als Referenz übergibst. In dem C++-Buch Deiner Wahl sollten Referenzen beschrieben sein.


Anmelden zum Antworten