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.)
Der Typabzug für auto
funktioniert genauso wie für Vorlagen:
auto
ableiten, erhalten Sie einen Werttyp. auto&
ableiten, erhalten Sie einen nicht-konstanten Referenztyp const auto&
ableiten, erhalten Sie eine const-Referenz auto&&
ableiten, erhalten Sie
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 ;."