Verstehe ich es richtig, dass die C++ 14 Standardbibliothek Bewegungssemantik verwendet? Mit anderen Worten, kann ich sicher sein, dass ich eine Bewegung statt eine Kopie in dem folgende Programm verwenden:Woher weiß ich, ob ich kopieren oder verschieben?
#include <iostream>
#include <string>
#include <vector>
using namespace std::string_literals;
std::vector<std::string> greeting()
{
std::vector<std::string> vs {"hello"s, "world"s};
return vs;
}
int main()
{
std::vector<std::string> s = greeting();
std::cout << s[0] << " " << s[1] << "\n" ;
}
Gibt es eine Möglichkeit kann ich überprüfen?
Wie etwa in folgendem Beispiel:
#include <iostream>
#include <string>
#include <vector>
using namespace std::string_literals;
class Greeting {
public:
std::string first, second;
Greeting() { first = "hello"s ; second = "world"s ;};
};
Greeting greetingc()
{
Greeting g;
return g;
}
int main()
{
Greeting g = greetingc();
std::cout << g.first << " " << g.second << "\n" ;
}
verschieben oder kopieren?
Wo genau möchten Sie überprüfen? Welche Codezeile sollte eine Bewegung sein? – rubenvb
@rubenvb Ich meine, wenn die Return-Anweisung aus Gruß (0 oder Greetingc()) aufgerufen wird, was macht das Programm: Kopiert es das Objekt (eine möglicherweise teure Operation) oder bewegt es das Objekt (eine billige Operation) – blippy
Wenn temporäre Objekte erstellt werden, auf die Sie keinen Zugriff haben, sind sie im Allgemeinen ein guter Kandidat für 'move semantics'. – sameerkn