小编典典

什么是 string_view?

all

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

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

  • 这是正确的吗 ?
  • 规范 const std::string&参数类型应该变成string_view?
  • 还有一个重要的点string_view要考虑吗?

阅读 116

收藏
2022-06-23

共1个答案

小编典典

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

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

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

字符串的许多用途不需要实际拥有字符串,并且相关字符串通常已经由其他人拥有。因此,通过避免不需要的副本(想想您可以保存的所有分配和异常),确实有提高效率的潜力。

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

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

2022-06-23