C ++ Auto vs Auto &

8

wenn ich eine Funktion habe:

%Vor%

warum ist das:

%Vor%

nicht das gleiche wie das?

%Vor%

(Eigentlich würde ich erwarten, dass die zweite Version einen Verweis auf eine Referenz erhält, was wenig Sinn macht.)

Wenn ich den Typ von x explizit als Wert oder Referenz angegeben habe, bekomme ich (natürlich), was ich erwarte. Ich würde jedoch erwarten, dass auto auf den Rückgabetyp von Bar() kompilieren würde, was in diesem Fall eine Referenz ist.

Gibt es eine implizite Umwandlung zwischen Foo und Foo& , die hier zum Einsatz kommt?

(Spec-Referenzen akzeptiert, obwohl ich müde bin, Komitee-sprechen zu lesen.)

(Die zweite Verwendung der Zeitmaschine wird C ++ standardmäßig als Referenz übergeben. Mit einem #pragma compatibility -Trigger zum Kompilieren von C-Code. ARGH.)

    
David Lively 30.12.2013, 03:23
quelle

2 Antworten

25

Der Typabzug für auto funktioniert genauso wie für Vorlagen:

  • Wenn Sie auto ableiten, erhalten Sie einen Werttyp.
  • Wenn Sie auto& ableiten, erhalten Sie einen nicht-konstanten Referenztyp
  • Wenn Sie const auto& ableiten, erhalten Sie eine const-Referenz
  • wenn Sie auto&& ableiten, erhalten Sie
    • eine nicht-konstante Referenz, wenn Sie eine nicht-konstante Referenz
    • zuweisen
    • eine Konstante const, wenn Sie eine const-Referenz
    • zuweisen
    • ein Wert, wenn Sie ein temporäres
    • zuweisen
denisek 30.12.2013, 03:27
quelle
11

Aus dem Blogeintrag von Herb Sutter:

  

auto bedeutet "nimm genau den Typ auf der rechten Seite, entferne aber die oberste Ebene const / volatile und & amp; / & amp; & amp ;."

    
WiSaGaN 30.12.2013 03:27
quelle

Tags und Links