CPP 中的字符串引用处理

string references handling in cpp

本文关键字:引用 处理 字符串 CPP      更新时间:2023-10-16

遇到一个场景,我无法清楚地了解这里实际发生的事情。

这是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

初始化时分配给 num 的内存会发生什么情况?

引用是别名。在此行之后:

std::string &charStr = nums;

有一个变量有两个名称:numscharStr 。这两个名字从此等同;我们不能说"真实"的名字是一个,"参考"是另一个。

该行:

charStr = alpha;

是一个作业。(=符号在声明中的含义与在非声明声明中的含义不同;所以不要试图在心理上将这一行与前面的charStr声明相提并论)。

赋值对std::string的影响是左侧从右侧复制字符(如有必要分配更多存储空间);因此,名称numscharStr的字符串从alpha中获取字符。

这与参考文献无关,它与您编写nums = alpha;相同。

 std::string &charStr = nums;

在这里charStr成为对nums的引用。因此,如果更改 charStr 的值,则会更改nums的值,因为numscharStr都引用相同的内存位置。

charStr=alpha;

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

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