2013-04-11 87 views
5

如果我有:使用字符串賦值和複合賦值是否安全?

#include <string> 

std::string myString = "Hello"; 

然後請執行:

myString = "Hello World"; 

myString+= " World"; 

我是在寫了一些其他內存的危險?
我必須使用字符串函數來添加或更改字符串的大小嗎?

回答

7

隨着std::string,這是完全正常的,因爲std::string管理自己的內存。

使用char*的c風格字符串,您需要管理自己的內存。

+0

謝謝!我希望這會很容易。 – Tez 2013-04-11 08:34:20

+2

這是爲什麼字符串被添加到庫中的主要原因。 – Barmar 2013-04-11 08:34:32

1

使用string給你處理它,就像像其他基本數據類型的豪華intfloat

int a = 3;,可向a = 5a += 3無任何傷害

也是一樣

string myString = "Hello"; 

myString = "Hello World"; 

myString+= " World"; 
+0

我不認爲這是正確的。例如,無符號字符只能達到255.除此之外,它不起作用。使用字符串,您可以隨心所欲地添加(直到您的計算機內存不足)。雖然我只是猜測,因爲我是C++的新手。像在你的例子中一樣加3,你只是改變存儲的值,你不會增加'int'的容量。 – Tez 2013-04-11 10:29:03

+0

@Tez是的,我很抱歉沒有說清楚。我不打算通過doin'+ = 3'來增加int的大小。我想用'std :: string'指出你可以使用'+'等改變字符串中的數據。用'char *'等我們需要使用'strcat()'... – 2013-04-11 10:41:14

+0

好的。沒有傷害:) – Tez 2013-04-11 12:20:57

5

std字符串就像任何其他容器類一樣向量。他們也有連續的內存結構,當他們需要額外的空間時,他們只是爲自己重新分配內存。

如果您正在處理頻繁的字符串更新並且字符串會隨時間增長,您可以調用string :: reserve()方法爲您的字符串預先分配一些內存,以便新的插入不會導致大量的內存移動

+0

你的意思是*連續*記憶,而不是*傳染性*? – Default 2013-04-11 09:09:06

+0

@默認抱歉,我的意思是連續的 – 2013-04-11 09:39:34