CPP 中的字符串引用处理
string references handling in cpp
遇到一个场景,我无法清楚地了解这里实际发生的事情。
这是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;
有一个变量有两个名称:nums
和 charStr
。这两个名字从此等同;我们不能说"真实"的名字是一个,"参考"是另一个。
该行:
charStr = alpha;
是一个作业。(=
符号在声明中的含义与在非声明声明中的含义不同;所以不要试图在心理上将这一行与前面的charStr
声明相提并论)。
赋值对std::string
的影响是左侧从右侧复制字符(如有必要分配更多存储空间);因此,名称nums
和charStr
的字符串从alpha
中获取字符。
这与参考文献无关,它与您编写nums = alpha;
相同。
std::string &charStr = nums;
在这里charStr
成为对nums
的引用。因此,如果更改 charStr
的值,则会更改nums
的值,因为nums
和charStr
都引用相同的内存位置。
charStr=alpha;
更改 charStr
的值会更改 nums
的值。
在此之后,所有nums
、alpha
、charStr
具有相同的值(abcdefghijklmnopqrstuvwxyz
相关文章:
- 处理类内的回调时,必须调用对非静态成员函数的引用
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- 当使用CreateObject从VBScript引用DLL时C++如何处理DLL版本?
- 引用计数智能指针如何避免或处理引用计数器溢出?
- 在闭包中,如何通过存储在内存中的指针或引用类型捕获可变性或用现代函数式语言进行处理?
- 如何在类中进行 c++ 多线程处理(将线程引用保留为成员 var)
- C++处理取消引用语法的泛型类
- 处理受向 std::vector 添加元素影响的引用
- 转发引用是否可以使用别名模板进行别名处理
- 未定义的引用C++队列模板处理字符串
- 对boost asio完成处理程序的rvalue引用
- 有没有一种方法可以使用引用而不是指针来处理相互包含数据的类
- 我正在处理一个 c++ 项目,但在通过引用传递 rect0 对象时遇到问题
- CPP 中的字符串引用处理
- 处理对“vector_binary_operation”类中“表达式”的引用,而无需不必要的副本
- C# 与C++通过引用处理传递
- 处理文件中的数据引用/指针
- C++异常处理通过引用传递:抛出的地址与捕获的地址不同
- 编译器构造:处理对无序符号的引用
- 内核崩溃-无法处理000002c0处的内核NULL指针取消引用