Warum Definition von std :: function <> :: operator() im ++ Standard C:C++ 11 std :: Funktion und perfektes Forwarding
R operator()(ArgTypes...) const;
und nicht
R operator()(ArgTypes&&...) const;
?
Man würde denken, dass richtig vorwärts Parameter, müssen wir die & & und dann std::forward<ArgTypes>...
im Funktionskörper verwenden, wenn die Anrufumleitung?
ich teilweise std :: Funktion zu testen, diese neu implementiert und ich fand heraus, dass, wenn ich die & & verwenden, erhalte ich „nicht binden kann‚xxx‘L-Wert zu‚xxx & &‘“ von g ++, wenn ich später versuchen zu passieren Parameter nach Wert für operator(). Ich dachte, dass ich die rvalue/forwarding Konzepte genug verstanden habe, aber ich kann diesen Punkt noch nicht verstehen. Was vermisse ich?
Danke, alles macht jetzt vollkommen Sinn. – airman
@Xeo, dein Code kompiliert korrekt ... http://ideone.com/7TyCB8 Es gibt keinen Fehler bei f (i), kannst du erklären, was du mit "// error" meinst, oder vielleicht benutze ich den falscher Compiler. Vielen Dank. –
@WillBradley: Lesen Sie den Kommentar an der Spitze von 'main': *** Nehmen Sie an *** dass' std :: function :: operator() ''s Unterschrift war eigentlich' R (Args && ...) '- dies würde, zum Beispiel, mit der Funktion '' void (int &&) 'für den' operator() 'erzeugen, der jetzt nur rvalues akzeptiert. –
Xeo