Es gibt mehrere constructors für std::string
. Ich suchte nach einer Möglichkeit, die Neuzuweisung zu vermeiden, und ich bin überrascht, dass es einen Füllkonstruktor gibt, aber keinen "Reserve" -Konstruktor.Warum gibt es keinen Reservierungskonstruktor für std :: string?
std::string (size_t n, char c);
aber keine
std::string (size_t n);
So habe ich reserve()
zu nennen, nachdem er bereits den Standard (16 Bytes in meinem Fall) zugeordnet ist, nur sie sofort neu zu verteilen?
Gibt es einen Grund, warum es keinen solchen Konstruktor gibt, um Speicherplatz direkt beim Erstellen des Objekts zu reservieren, anstatt es manuell zu tun? Oder fehlt mir etwas und es gibt einen Weg, dies zu tun?
die Füllung Konstruktor ist eine Verschwendung von Zeit, weil es eine Schleife durch den Speicher nur überschrieben zu bekommen, und auch eine falsche Größe verursachen, weil s.length()
berichtet N
statt 0
.
Sind Sie sicher, dass 16 Bytes standardmäßig reserviert sind? ('sizeof (std :: string)' hat damit nichts zu tun) – deviantfan
@deviantfan, das ist implementation-defined – SingerOfTheFall
@SingerOfTheFall Ja, wie die 16 Byte auch. Ich meinte speziell Devolus Implementierung – deviantfan