Rückgabe als Referenz, Pointer und andere Dinge



  • Hallo, kommen wir erstmal zu den "anderen Dingen":

    Vor langer Zeit habe ich hier schon mal die Frage gestellt, wo der unterschied zwischen

    endl
    

    und

    \n
    

    besteht.

    Als Antwort bekam ich das Programm

    for(int i=0;i<20;++i)
    {
       cout<<i<<"\n";
       Sleep(500);
    }
    

    und dann:

    for(int i=0;i<20;++i)
    {
       cout<<i<<endl;
       Sleep(500);
    }
    

    Ich hab das Beispiel kompiliert und bin immer noch zu keiner Antwort gekommen.

    Wo zum Teufel liegt da der Unterschied? Da wurde noch etwas über Buffer oder Puffer geredet, aber, sorry, ich weiss nicht was das sein soll.

    Zu Referenzen und Pointern:

    Aus was besteht diese Rückgabe?

    int& funktion(int value)
    {
      return value;
    }
    

    Wird 'value' etwa als Referenz zurückgegeben? Ja, sicher. Aber welchen Nutzen habe ich davon? Damit keine Kopie von value bereitgestellt wird? Da muss sicher noch mehr dahinter stecken.

    Eine Funktion wie etwa

    int* funktion(int value)
    {
      return value;
    }
    

    versteh ich überhaupt nicht mehr!

    Im Vorraus Danke.



  • endl flusht den Puffer, \n nicht. normalerweise werden die Daten ers in einem kleinen Zwischenspeicher gehalten und dann komplett ausgegeben, was zeit erspart. endl zwingt den Stream dazu den Puffer sofort zu leren.

    Zur Referenz: In dem Beispiel ist es sinnlos, da ein Integer genausoschnell kopiert wird, wie die Referenz an sich. Bei großen Klassen kann es aber erheblich länger dauern die ganze Klasse zu kopieren, als einfach nur eine kleine Referenz.

    Dein letztes Beispiel funzt nicht. Das müssste:

    int* funktion(int * value)
    {
      return value;
    }
    

    heißen und wurde zu c Zeiten verwendet (mit strukturen, aus ähnlichen gründen, wie jetzt Referenzen). Bei int macht es in diesem Beispiel ebenfalls keinen Sinn.



  • Besteht da irgend ein Unteschied zwischen deinem Pointer Programm und diesem hier:

    int funktion(int* value)
    {
      return *value;
    }
    

    ?



  • Orginal erstellt von Helium:
    *```cpp
    int
    funktion(int * value)
    {
    return value;
    }

    Gibt einen Zeiger auf einen Integer zurück.

    Original erstellt von <Henrie>:
    *```cpp
    int funktion(int
    value)
    {
    return *value;
    }

    Gibt eine Kopie vom Inhalt von value zurück.


Anmelden zum Antworten