Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+;中更改字符串的值时会发生什么+; #包括 #包括 使用名称空间std; int main(){ string str=“Hello”; str=“你好,世界”; cout_C++ - Fatal编程技术网

C++ 在C+;中更改字符串的值时会发生什么+; #包括 #包括 使用名称空间std; int main(){ string str=“Hello”; str=“你好,世界”; cout

C++ 在C+;中更改字符串的值时会发生什么+; #包括 #包括 使用名称空间std; int main(){ string str=“Hello”; str=“你好,世界”; cout,c++,C++,Re: “字符串如何处理内存 自动的 这意味着,除其他外,没有办法提供一个std::string,一个外部创建的缓冲区。因此它有点低效。好的一面是swap对std::string的要求(与std::vector相反)这意味着它可以使用小缓冲区优化,其中存储短字符串而无需动态分配,这有助于提高效率。std::string将自动将字符串复制到自己的内存中。std::string可能会清除其旧内容并将新字符串复制到内存中(如果需要,它将扩展用于存储字符串的内存存储)您应该获取一些并读取它们。@WhiZ

Re:

字符串如何处理内存

自动的


这意味着,除其他外,没有办法提供一个
std::string
,一个外部创建的缓冲区。因此它有点低效。好的一面是
swap
std::string
的要求(与
std::vector
相反)这意味着它可以使用小缓冲区优化,其中存储短字符串而无需动态分配,这有助于提高效率。

std::string
将自动将字符串复制到自己的内存中。
std::string
可能会清除其旧内容并将新字符串复制到内存中(如果需要,它将扩展用于存储字符串的内存存储)您应该获取一些并读取它们。@WhiZTiM它将如何在不更改地址的情况下执行此操作。@间谍:缓冲区地址,例如
&s[0]
,当
字符串
实例重新分配其内部缓冲区时发生更改。@Cheersandhth.-Alf谢谢,我想我理解了,但还有一件事我不确定,
main()的内存堆栈将发生什么更改
函数来实现这一点。你能给我们一个内存堆栈的视图吗。@间谍:我认为“内存堆栈”的意思是“内存布局”。没有太多。使用小缓冲区优化(非常短)字符串通常直接存储在
std::string
实例中。否则,该实例会在其他位置保存指向动态分配缓冲区的指针。非常短的字符串的长度可能是多少?尽可能适合一个或两个指针值。对于32位编译器,这并不多,比如7个字符左右。对于64位com比勒,可能是两倍。
#include <iostream>
#include <string>
using namespace std;
int main () {
  string str = "Hello";
  str = "Hello World";
  cout<<str<<endl;
}