gpt4 book ai didi

c++ - 什么是 string_view?

转载 作者:IT老高 更新时间:2023-10-28 11:32:31 25 4
gpt4 key购买 nike

string_view 是 C++ 库基础 TS(N3921) 中的一项提议功能,添加到 C++17

据我所知,它是一种代表某种字符串“概念”的类型,它是任何类型的容器的 View ,可以将可视内容存储为字符串。

  • 是这样吗?
  • 应该是规范的const std::string& 参数类型变成 string_view ?
  • 关于 string_view 是否还有其他需要考虑的重点?

最佳答案

任何和所有类型的“字符串引用”和“数组引用”提议的目的是避免复制已经在其他地方拥有的数据,并且只需要非变异 View 。有问题的 string_view 就是这样一个提议;还有更早的称为 string_refarray_ref

这个想法总是存储一对指向第一个元素的指针和一些现有数据数组或字符串的大小。

这样的 View 句柄类可以通过值廉价地传递,并提供廉价的子字符串操作(可以通过简单的指针增量和大小调整来实现)。

字符串的许多用途不需要实际拥有字符串,而相关字符串通常已经被其他人拥有。因此,通过避免不必要的拷贝(想想您可以节省的所有分配和异常),确实有提高效率的潜力。

原来的 C 字符串存在空终止符是字符串 API 的一部分的问题,因此如果不改变底层字符串(例如 strtok)就无法轻松创建子字符串。在 C++ 中,这很容易解决,方法是分别存储长度并将指针和大小包装到一个类中。

我能想到的与 C++ 标准库哲学的一个主要障碍和分歧是,这种“引用 View ”类与标准库的其余部分具有完全不同的所有权语义。基本上,标准库中的所有其他内容都是无条件安全和正确的(如果它编译,它就是正确的)。对于像这样的引用类,这不再是真的。程序的正确性取决于使用这些类的环境代码。所以这更难检查和教授。

关于c++ - 什么是 string_view?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20803826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com