Ich möchte mein Verständnis der eindeutigen Zeiger xvalue ArgumenteEindeutige Zeiger xvalue Semantik? Warum unterscheidet sich das Verhalten von Lambda f2 von Lambda f1?
Dies ist ein Beispiel Code, den ich geschrieben habe, um std :: move und eindeutige Zeiger zu lernen. Kann jemand erklären, warum line2 abstürzt, aber line1 funktioniert? Was macht das Verschieben in Lambda f2 in meinem Testprogramm? Warum funktioniert Zeile1 auch nach einem std :: move? Dies ist nur für mein Lernen und kein Hausaufgabe Problem, sie ist sehr neu in C++ 14 und C 11 ++
#include <iostream>
#include <functional>
#include <memory>
void test()
{
std::unique_ptr<int> p (new int(278));
auto f1 = [](std::unique_ptr<int> i){std::cout << *i << std::endl;};
auto f2 = [](std::unique_ptr<int> &&i){std::cout << *i << std::endl;};
f2(std::move(p));
std::cout << *p << std::endl; //line 1
f1(std::move(p));
std::cout << *p << std::endl; //line 2
}
int main(int argc, const char * argv[]) {
test();
return 0;
}
hinzugefügt die Bearbeitungen, es hat nicht kompiliert, weil ich die Header nicht hinzugefügt enthält –
Ich bin den gesamten Code von Xcode Version 7.2 einfügen. Ja sorry das ist ein Tippfehler. Es tut mir sehr leid –
Apple LLVM 7.0, korrigierte ich die Tippfehler in endl. Danke für den Fang –