Siehe den folgenden Code - Ich versuche ein konstantes Objekt in einen Vektor zu setzen. Ich weiß, die Antwort lautet: "STL-Container erfordern, dass Objekte zuweisbar und kopierbar sind", aber ohne den Standard zu zitieren, kann jemand erklären, was das Problem dabei ist? Ich verstehe nicht, warum eine Klasse wie diese nicht kopiert werden kann (außerdem erlaubt c ++ das nicht).
Es ist nur ein gespeicherter Wert, der nicht geändert werden darf. Warum kann er nicht in einen Vektor eingefügt werden, um einfach ein anderes dieser Objekte zu erstellen?
%Vor%BEARBEITEN:
Dies ist mit std :: set und std :: list möglich. Ich denke, es ist die Funktion sort () in std :: vector, die Zuweisung verwendet. Das ist nicht UB oder?
%Vor% EDIT2: (Entfernen einer Menge Sachen, die nicht funktionieren müssen) Der C ++ 11 Standard gibt an, dass die insert
Methode für vector
und deque
(und die Standardimplementierung von push_back
für (Das ist wichtig) erfordert den Werttyp CopyAssignable
, dh der Wert unterstützt:
Klassen und Strukturen mit const
-Members sind standardmäßig nicht CopyAssignable
. Was Sie also tun möchten, funktioniert nicht.
Dieses Dokument (n3173) enthält eine Erklärung dafür die verschiedenen Containeranforderungen.
Eine mögliche Lösung wäre, Zeiger auf die Objekte im Vektor zu speichern, da Zeiger zuweisbar und kopierbar sind.
Eine andere mögliche Lösung wäre, x ohne das Schlüsselwort const zu deklarieren, aber stellen Sie sicher, dass es nicht durch Kapselung geändert werden kann (d. h. Sie sollten es als privat deklarieren und von außerhalb des Konstruktors nicht modifizieren).
Tags und Links c++