遇到一种情况,我无法清楚地了解到这里发生的事情。
//这是CPP计划。
#include <iostream>
#include <time.h>
using namespace std;
int main() {
std::string nums ( "1234567890" ); //What happens with this memory??
std::string alpha ("abcdefghijklmnopqrstuvwxyz");
std::string &charStr = nums;
charStr = alpha;
cout <<"nums : " << nums <<endl;
cout <<"alpha :" << alpha <<endl;
cout <<"charStr :" << charStr <<endl;
return 0;
}
输出是:
nums:abcdefghijklmnopqrstuvwxyz
alpha:abcdefghijklmnopqrstuvwxyz
charStr:abcdefghijklmnopqrstuvwxyz
在初始化时分配给nums的内存会发生什么?
答案 0 :(得分:2)
引用是别名。在这一行之后:
std::string &charStr = nums;
有一个变量有两个名称:nums
和charStr
。这两个名字与此相同;我们不能说&#34;真实&#34; name是一个&#34;引用&#34;是另一个。
该行:
charStr = alpha;
是一项任务。 (=
符号在声明中的含义与非声明语句中的含义不同;因此,请勿尝试在此行与先前charStr
的声明之间绘制心理相似之处。 / p>
分配对std::string
的影响是左手边从右边复制字符(必要时分配更多存储空间);所以名称为nums
和charStr
的字符串会获取从alpha
复制的字符。
这与引用无关,就像你写的nums = alpha;
一样。
答案 1 :(得分:1)
std::string &charStr = nums;
此处charStr
成为对nums
的引用。因此,如果您更改charStr
的值,则会更改nums
的值,因为nums
和charStr
都指向相同的内存位置。
charStr=alpha;
更改charStr
的值会更改nums
的值。
此后所有nums
,alpha
,charStr
具有相同的值(abcdefghijklmnopqrstuvwxyz
)