Typ Auto und ein Anfänger



  • Hallo,

    ich bin gerade mit Hello World fertig geworden.
    Dann hab ich mir auto angesehen - Sinnvoll? Vor- Nachteile etc.
    Auf der Microsoft Seite steht folgendes:
    Kommentare sind von mir

    int main( )
    {
        int count = 10; //count ist jetzt 10
        int& countRef = count; //countRef ist jetzt count also auch 10
        auto myAuto = countRef; // myAuto ist jetzt countRef also auch 10
    
        countRef = 11; //countRef ist jetzt 11
        cout << count << " "; // " " in count(leerzeichen?) Ausgabe von count also 10
    
        myAuto = 12; //myAuto ist jetzt 12
        cout << count << endl; //Ende der Zeile und Ausgabe von count also 10
    }
    

    Ergebnis ist 11 11.
    Ich hätte 10 10 erwartet und Microsoft meint, man würde 11 12 erwarten.
    http://msdn.microsoft.com/de-de/library/dd293667.aspx

    Anstelle von auto bei auto myAuto habe ich int& myAuto geschrieben und 11 12 erhalten.

    Was ist hier passiert? 😕



  • countRef ist nur eine Referenz auf count, die beiden Variablen zeigen sozusagen auf den selben Speicherbereich. Wenn du countRef auf 11 setzt wird dementsprechend auch count 11 sein. myAuto allerdings ist keine Referenz, nur eine normale (neue) Variable, die mit dem Inhalt von countRef gefüllt wird. Wenn du num myAuto auf 12 setzt ändert sich bei count und countRef garnichts, da - wie gesagt - myAuto nichts mehr mit den anderen beiden Variablen zutun hat.



  • fast hätte ich gesagt das alles klar ist.

    wie kommt jetzt aber die 12 von myAuto in die Ausgabe(wenn auto durch int& ersetzt wird)? Nirgends wird myAuto ausgegeben...


  • Mod

    Microsoft meint, man würde 11 12 erwarten.

    Wo? Im Übrigen hättest du einfach mal die verlinkte Seite lesen können:

    Es scheint, als wäre myAuto ein int-Verweis, was jedoch nicht der Fall ist. Es ist einfach ein "int", sodass die Ausgabe 11 11 ist und nicht 11 12, was der Fall wäre, wenn der Verweis nicht von auto abgelegt worden wäre.

    wie kommt jetzt aber die 12 von myAuto in die Ausgabe(wenn auto durch int& ersetzt wird)?

    Weil du dann eine Referenz hast die die ursprüngliche Variable verändert?

    ich bin gerade mit Hello World fertig geworden.

    Und jetzt wagst du dich schon an so etwas heran? Du musst dir noch deutlich mehr Grundlagen aneignen als nur die absoluten Basics um sog. placeholder-Typen zu verstehen. Hast du ein Grundlagenbuch?



  • int& ist wiederum eine Referenz... Gab es in deinem Einsteigerbuch keine Informationen zu Referenzen?



  • Warum ich jetzt "schon" bei auto bin:
    Nach hello world wollte ich a+b addieren und mich an einen taschenrechner rantasten.
    jetzt ist mir auto bekannt, da wollte ich schauen ob ich das gleich verwenden sollte oder ob es zu ungenau ist... bei der suche kam ich auf die microsoftseite und hab das beispiel nicht verstanden, den rest kennt ihr.

    die seite habe ich auch gelesen, "int-Verweis" und "einfach nur int" sagt mir im moment nicht viel.
    nunja ausgaben und referenzen muss ich mir dann auch noch ansehen.



  • Natürlich musst du dir erstmal Referenzen ansehen, wenn du das Zusammenspiel von auto und Referenzen verstehen willst 😕



  • also erstmal solltest du referenzen verstehen. Eine referenz funktioniert wie ein alias. alles was du am original änderst ändert sich auch an der referenz and umgekehrt.

    auto ist kein typ, sondern ein schlüsselwort das seit c++11 für Typinferenz verwendet wird. Der Typ einer Variablen ist niemals auto. Der Typ einer auto Variablen hängt immer vom Initialwert ab. Du kannst aber zusätzlich zu auto noch & schreiben, dann ist es eine Referenz auf den referierten Typ und keine Kopie.


Anmelden zum Antworten