Beispielcode:Semantik und primitive Typen bewegen
int main()
{
std::vector<int> v1{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::cout << "Printing v1" << std::endl;
print(v1);
std::vector<int> v2(std::make_move_iterator(v1.begin()),
std::make_move_iterator(v1.end()));
std::cout << "Printing v1" << std::endl;
print(v1);
std::cout << "Printing v2" << std::endl;
print(v2);
std::vector<std::string> v3{"some", "stuff", "to",
"put", "in", "the", "strings"};
std::cout << "Printing v3" << std::endl;
print(v3);
std::vector<std::string> v4(std::make_move_iterator(v3.begin()),
std::make_move_iterator(v3.end()));
std::cout << "Printing v3" << std::endl;
print(v3);
std::cout << "Printing v4" << std::endl;
print(v4);
}
Ausgang:
Printing v1
1 2 3 4 5 6 7 8 9 10
Printing v1
1 2 3 4 5 6 7 8 9 10
Printing v2
1 2 3 4 5 6 7 8 9 10
Printing v3
some stuff to put in the strings
Printing v3
Printing v4
some stuff to put in the strings
Fragen
Seit Verschiebeoperationen o n primitive types ist nur eine Kopie, kann ich davon ausgehen, dass
v1
unverändert gelassen wird oder ist der Zustand auch bei primitiven Typen nicht spezifiziert?Ich nehme an, der Grund, warum primitive Typen keine Bewegungssemantik haben, ist, weil das Kopieren genauso schnell oder sogar schneller ist, ist das korrekt?
Die Regel "Gültiger, aber nicht angegebener Status" gilt nur für Standardbibliothekstypen ([lib.types.movefrom]). "Bewegliche" Grundtypen werden von den Kernsprachenregeln gesteuert, und für solche Typen ist eine Bewegung eine Kopie. –