2013-04-11 17 views
5

Wenn ich habe:Ist es sicher, String-Zuweisung und Compound-Zuweisung zu verwenden?

#include <string> 

std::string myString = "Hello"; 

dann tun entweder:

myString = "Hello World"; 

oder

myString+= " World"; 

Bin ich mit einem Risiko von mehr als einem anderen Speicher zu schreiben?
Muss ich String-Funktionen verwenden, um die Größe der Zeichenfolge hinzuzufügen oder zu ändern?

Antwort

7

Mit std::string ist das völlig in Ordnung, da std::string seinen eigenen Speicher verwaltet.

Bei C-Style-Strings, die char* verwenden, müssen Sie Ihren eigenen Speicher verwalten.

+0

Danke! Ich hatte gehofft, es wäre so einfach. – Tez

+2

Dies ist der Hauptgrund, warum 'string' zur Bibliothek hinzugefügt wurde. – Barmar

1

Mit string gibt Ihnen den Luxus es genau wie andere primitive Datentypen handhaben wie intfloat usw.

int a = 3; kann geht ohne Schaden für a = 5 oder a += 3 gemacht werden

Das Gleiche gilt für

string myString = "Hello"; 

myString = "Hello World"; 

myString+= " World"; 
+0

Ich glaube nicht, dass das korrekt ist. unsigned char zum Beispiel geht nur bis 255. Mehr als das und es wird nicht funktionieren. Mit Strings können Sie einfach so viel hinzufügen, wie Sie möchten (bis der Computer nicht mehr genügend Speicherplatz hat). Obwohl ich nur rate, seit ich neu in C++ bin. Wenn Sie wie in Ihrem Beispiel 3 zu einer Ganzzahl hinzufügen, ändern Sie nur den gespeicherten Wert, Sie erhöhen nicht die Kapazität eines 'int'. – Tez

+0

@Tez Ja, es tut mir leid, dass ich das nicht klar gemacht habe. Ich wollte die 'Größe' von' int' nicht durch doin '+ = 3' erhöhen. Ich wollte angeben, dass mit 'std :: string' die Daten in der Zeichenkette mit' + 'usw. geändert werden können. Mit' char * 'etc müssen wir' strcat() '... verwenden. –

+0

Ah ok. Kein Schaden angerichtet :) – Tez

5

Std-Zeichenfolge ist wie jede andere Container-Klasse wie Vektor. Sie haben auch eine zusammenhängende Speicherstruktur und wenn sie zusätzlichen Speicherplatz benötigen, ordnen sie Speicher einfach für sich selbst zu.

Wenn Sie mit häufigen String-Updates arbeiten und Ihre Strings rechtzeitig wachsen, können Sie die string :: reserve() -Methode aufrufen, um Speicherplatz für Ihre Strings vorzugeben, damit neue Insertionen nicht zu Massenspeicherbewegungen führen

+0

meinst du * continuous * memory statt * ansteckend *? – Default

+0

@Default sorry, ich meine zusammenhängend –

Verwandte Themen