Die Containeranforderungen wurden von C ++ 03 auf C ++ 11 geändert. Während C ++ 03 pauschale Anforderungen hatte (z. B. Kopierkonstruierbarkeit und Zuweisbarkeit für Vektoren), definiert C ++ 11 feinkörnige Anforderungen für jede Containeroperation (Abschnitt 23.2).
Infolgedessen können Sie beispielsweise einen Typ, der kopierkonstruierbar, aber nicht zuweisbar ist, wie z. B. eine Struktur mit einem const-Element, in einem Vektor speichern, solange Sie nur bestimmte Operationen ausführen, für die keine Zuweisung erforderlich ist (Konstruktion und push_back
solche Operationen) ; insert
nicht ist).
Was ich mich frage ist: Bedeutet das, dass der Standard jetzt erlaubt vector<const T>
? Ich sehe keinen Grund, warum dies nicht der Fall sein sollte - const T
genau wie eine Struktur mit einem const-Member ist ein Typ, der kopierkonstruierbar, aber nicht zuweisbar ist -, aber ich habe möglicherweise etwas übersehen.
(Ein Teil von dem, was mich denken lässt, dass ich etwas verpasst habe, ist, dass der gcc-Trunk abstürzt und brennt, wenn Sie versuchen zu instanziieren vector<const T>
, aber es ist in Ordnung, vector<T>
wenn T ein const-Mitglied hat).
address
Elementfunktionen im Standardzuweiser: Wenn T const ist, haben diese beiden Überladungen dieselbe Signatur. Eine einfache Möglichkeit, dies zu korrigieren, besteht darinstd::allocator<const T>
, eine der Überlastungen zu spezialisieren und zu entfernen.