Erster Teil:Was ist die zugrunde liegende Struktur von std :: initializer_list?
std::initializer_list
ist eine wirklich hilfreiche Funktion von ++ 11 C, so fragte ich mich, wie es in der Standard-Bibliothek implementiert. Von dem, was ich here gelesen habe, erstellt der Compiler ein Array vom Typ T
und gibt den Zeiger auf initializer_list<T>
.
Es gibt auch an, dass das Kopieren eines initializer_list
ein neues Objekt erstellt, das auf die gleichen Daten verweist: warum ist es so? Ich hätte gedacht, dass es entweder:
- kopiert die Daten für die neue
initializer_list
- bewegt sich das Eigentum an den Daten auf den neuen
initializer_list
Zweiter Teil:
Schon ab eine von vielen Online-Referenzen für die std::vector
Konstruktoren:
vector (initializer_list<value_type> il,
const allocator_type& alloc = allocator_type());
(6) Initialisiererliste Konstruktors
Konstrukte ein Behälter mit einer Kopie von jedem der Elemente in il, in der gleichen Reihenfolge.
Ich bin mit Bewegung Semantik noch nicht komfortabel, können aber nicht die Daten von il
zum vector
verschoben werden? Ich bin mir der tiefen Implementierung von std::vector
nicht bewusst, aber IIRC verwendet es Plain-Old-Arrays.
Scheint wie ein anderer Grund, cplusplus.com nicht zu vertrauen. Wenn man sich in den Standard begibt, gelangt man schließlich zu der Initialisierer-Liste ctor, die das Paar von Iteratoren ctor aufruft, das (wenn man die Emplace-Konstruktion verwendet) die Elemente wenn möglich verschiebt. – Angew
cplusplus.com ist eine schreckliche, schreckliche Seite, die der C++ - Community Schaden zufügt. Jemand sollte die Server, die ihn hosten, zerschlagen, die Festplatten brennen, sie in Beton einhüllen und sie auf den Grund des Ozeans versenken. –
'Was ist die zugrunde liegende Struktur von std :: initializer_list?' Abstrahiert weg von Ihnen, aus gutem Grund. –