cpp中的字符串引用处理

时间:2015-01-21 05:28:37

标签: c++ reference

遇到一种情况,我无法清楚地了解到这里发生的事情。

//这是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的内存会发生什么?

2 个答案:

答案 0 :(得分:2)

引用是别名。在这一行之后:

std::string &charStr = nums;

有一个变量有两个名称:numscharStr。这两个名字与此相同;我们不能说&#34;真实&#34; name是一个&#34;引用&#34;是另一个。

该行:

charStr = alpha;

是一项任务。 (=符号在声明中的含义与非声明语句中的含义不同;因此,请勿尝试在此行与先前charStr的声明之间绘制心理相似之处。 / p>

分配对std::string的影响是左手边从右边复制字符(必要时分配更多存储空间);所以名称为numscharStr的字符串会获取从alpha复制的字符。

这与引用无关,就像你写的nums = alpha;一样。

答案 1 :(得分:1)

 std::string &charStr = nums;

此处charStr成为对nums的引用。因此,如果您更改charStr的值,则会更改nums的值,因为numscharStr都指向相同的内存位置。

charStr=alpha;

更改charStr的值会更改nums的值。

此后所有numsalphacharStr具有相同的值(abcdefghijklmnopqrstuvwxyz