const string 与const string&(C++中的引用)

本文详细解释了C++中指针与引用的概念及其区别,包括它们的定义方式、使用特点及内存分配情况,并探讨了两者在实际编程中的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不带的是一个常对象,带&是一个常引用,那么什么叫常引用呢?

在讲引用作为函数参数进行传递时,实质上传递的是实参本身,即传递进来的不是实参的一个拷贝,因此对形参的修改其实是对实参的修改,所以在用引用进行参数传递时,不仅节约时间,而且可以节约空间。参考链接“http://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004869.html”

指针和引用的定义和性质区别:

指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;

引用:是跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:

int a=1;int *p=&a;

int a=1;int &b=a;

上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。

而下面2句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单元。且引用一定指向一个对象,所以在C++里,引用应被初始化。


参考博客:http://blog.youkuaiyun.com/thisispan/article/details/7456169

★ 相同点:

    1. 都是地址的概念;

    指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。

    ★ 区别:

    1. 指针是一个实体,而引用仅是个别名;

    2. 引用使用时无需解引用(*),指针需要解引用;

    3. 引用只能在定义时被初始化一次,之后不可变;指针可变;

    引用“从一而终” ^_^

    4. 引用没有 const,指针有 const,const 的指针不可变;

    5. 引用不能为空,指针可以为空;

    6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;

    typeid(T) == typeid(T&) 恒为真,sizeof(T) == sizeof(T&) 恒为真,但是当引用作为成员时,其占用空间与指针相同(没找到标准的规定)。

    7. 指针和引用的自增(++)运算意义不一样;





### C++ `string_view` 和 `const string&` 的比较 #### 定义特性 `std::string_view` 是一种轻量级的字符串视图类,提供了一种高效的方式访问不可变字符序列而无需复制数据[^3]。相比之下,`const std::string &` 则是对已存在的标准库字符串对象的一个常量引用。 - 使用 `std::string_view` 可以减少不必要的内存分配操作,因为其并不拥有底层的数据而是仅仅持有指向外部存储区间的引用。 - 对于 `const std::string &`, 当传递给函数作为参数时会绑定到实际的对象上;这意味着该引用的有效期依赖于被引用实体的存在时间。 #### 性能差异 当处理临时创建的小型字符串或频繁调用短生命周期内的局部变量时,采用 `std::string_view` 能够显著降低开销并提高性能效率[^4]。然而,在涉及长时间存活的大规模文本块或者需要确保内部缓冲区内存管理的情况下,则更适合选用 `const std::string &`. ```cpp // Example of using string_view for efficient parameter passing void process_text(std::string_view text) { // Process the given text without copying it into a new string object. } // Using const string reference when ownership semantics are important void store_message(const std::string &message) { // Store or manipulate message with guaranteed lifetime management by caller. } ``` #### 生命周期考量 由于 `std::string_view` 不具备所有权概念,因此使用者需特别注意所引用的数据源在其作用范围内保持有效状态。相反地,通过 `const std::string &` 接收参数可以更好地控制关联资源的生命期限,并且更容易理解程序逻辑中的责任划分[^5].
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值