2013-04-11 52 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