erwarten Ich versuche, einige grundlegende C++ 11 zu lernen, Vortrag mit Scott Meyers auf youtube "Eine effektive C++ 14.11 Sampler" genanntstd :: vorwärts Visual Studio 13 nicht verhalten wie ich
https://www.youtube.com/watch?v=BezbcQIuCsY
seinen Beispielcode verwendet für std::forward
(min 19 in der Vorlesung) ich den folgenden Code schrieb die Wirkung von std::forward
#include "stdafx.h"
#include <string>
#include <utility>
class A
{
public:
void Foo(std::string&& s)
{
std::string s2 = std::forward<std::string>(s);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A a;
std::string s3 = "Hello World";
a.Foo(s3);
a.Foo("Hello World");
return 0;
}
Überraschenderweise zu verstehen es nicht, kann nicht kompiliert a.Foo(s3)
nicht implizit gegossen aus l Wert zu rvalue. So änderte ich a.Foo(s3);
zu a.Foo(std::move(s3));
Nun kompiliert es. Allerdings wurde bei beiden Aufrufen von Foo std::forward<std::string>(s);
ein rvalue aufgelöst und eine Move-Operation ausgeführt (s wurde auf ""
zurückgesetzt, da sein Puffer gestohlen wurde).
Also ich verstehe wirklich nicht, was gut ist std::forward
und wann es gilt. Was fehlt mir hier?
'std :: string &&' ist eine rvalue Referenz, keine Forwarding Referenz (oder „universelle Referenz“, wie es für eine Weile bekannt war). – ildjarn