如果我有:使用字符串赋值和复合赋值是否安全?
#include <string>
std::string myString = "Hello";
然后请执行:
myString = "Hello World";
或
myString+= " World";
我是在写了一些其他内存的危险?
我必须使用字符串函数来添加或更改字符串的大小吗?
如果我有:使用字符串赋值和复合赋值是否安全?
#include <string>
std::string myString = "Hello";
然后请执行:
myString = "Hello World";
或
myString+= " World";
我是在写了一些其他内存的危险?
我必须使用字符串函数来添加或更改字符串的大小吗?
随着std::string
,这是完全正常的,因为std::string
管理自己的内存。
使用char*
的c风格字符串,您需要管理自己的内存。
使用string
给你处理它,就像像其他基本数据类型的豪华int
float
等
int a = 3;
,可向a = 5
或a += 3
无任何伤害
也是一样
string myString = "Hello";
myString = "Hello World";
myString+= " World";
我不认为这是正确的。例如,无符号字符只能达到255.除此之外,它不起作用。使用字符串,您可以随心所欲地添加(直到您的计算机内存不足)。虽然我只是猜测,因为我是C++的新手。像在你的例子中一样加3,你只是改变存储的值,你不会增加'int'的容量。 – Tez 2013-04-11 10:29:03
@Tez是的,我很抱歉没有说清楚。我不打算通过doin'+ = 3'来增加int的大小。我想用'std :: string'指出你可以使用'+'等改变字符串中的数据。用'char *'等我们需要使用'strcat()'... – 2013-04-11 10:41:14
好的。没有伤害:) – Tez 2013-04-11 12:20:57
std字符串就像任何其他容器类一样向量。他们也有连续的内存结构,当他们需要额外的空间时,他们只是为自己重新分配内存。
如果您正在处理频繁的字符串更新并且字符串会随时间增长,您可以调用string :: reserve()方法为您的字符串预先分配一些内存,以便新的插入不会导致大量的内存移动
你的意思是*连续*记忆,而不是*传染性*? – Default 2013-04-11 09:09:06
@默认抱歉,我的意思是连续的 – 2013-04-11 09:39:34
谢谢!我希望这会很容易。 – Tez 2013-04-11 08:34:20
这是为什么字符串被添加到库中的主要原因。 – Barmar 2013-04-11 08:34:32