std::string 和 std::string_view

一句话总结

std::string = 拥有内存、可修改、会拷贝std::string_view = 只看指针、不拥有、零拷贝、只读


1. 核心区别(最关键)

表格

特性std::stringstd::string_view
所有权拥有字符串内存不拥有,只是一个 “视图 / 窗口”
拷贝成本高(复制整个字符)0 成本(只复制指针 + 长度)
可修改✅ 可以修改只读
内存管理自动释放不管内存
适用场景存字符串、改字符串函数传参、只读遍历、解析

2. 最简单理解

  • string = 你买了一本书,可以写、可以撕、可以留着
  • string_view = 你站在书架前看书,只能看,不能改,书不是你的

3. 代码对比

① std::string(会拷贝、慢)

cpp

运行

void print(std::string s) {  // 这里会拷贝一份字符串!
    cout << s << endl;
}

print("hello world");  // 产生临时对象 + 拷贝

② std::string_view(零拷贝、快)

cpp

运行

void print(std::string_view s) {  // 无拷贝!仅指针+长度
    cout << s << endl;
}

print("hello world");   // 超级快
string str = "test";
print(str);             // 也超级快

4. 什么时候必须用 string_view?

只要你的函数【只读取、不修改】字符串,就用它!

适用场景:

  • 日志打印
  • 查找、匹配、解析
  • 配置读取
  • 作为函数入参

好处:✅ 速度极快不产生内存分配兼容 const char + std::string*


5. 什么时候不能用 string_view?

  • 需要修改字符串
  • 需要保存字符串(生命周期不确定)
  • 需要c_str() 长期使用(string_view 不保证末尾 \0)

6. 最实用规则(背会就够)

👉 函数参数:优先用 std::string_view

cpp

运行

// 好
void func(std::string_view s);

// 一般(只有要修改时才用)
void func(std::string& s);

👉 存储变量:用 std::string

cpp

运行

std::string name = "zhangsan";  // 存起来

7. 相互转换

cpp

运行

string s = "abc";
string_view sv = s;        // string → view(快)

string s2(sv);             // view → string(会拷贝)

🎯 最终结论

  • 只读、传参、解析 → string_view(更快、更好)
  • 存储、修改、保存 → string(必须)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++程序员kingfriend

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值