什么是string_view?
string_view
似乎是C ++库基础知识TS: N3921中提出的一个function
据我了解,它是一种types,代表某种types的string“概念”,是任何types的容器,可以存储的东西可以看作一个string的视图。
- 这是正确的吗 ?
- 如果这个build议被接受,那么规范的
const std::string&
参数types将变成string_view
? - 关于
string_view
还有另外一个重点需要考虑吗?
任何和所有types的“string引用”和“数组引用”提议的目的是为了避免复制已经在其他地方拥有并且只需要非变异视图的数据。 有问题的string_view
就是这样一个提议。 之前有一些叫做string_ref
和array_ref
。
这个想法总是存储一对指向第一个元素的大小和一些现有的数据数组或string的大小。
这样的视图句柄类可以通过价值便宜的方式传递,并且可以提供便宜的子串操作(可以实现为简单的指针增量和大小调整)。
string的许多用法并不要求实际拥有string,并且所讨论的string通常已经被其他人拥有。 因此,通过避免不必要的副本(考虑可以节省的所有分配和例外),提高效率是一个真正的潜力。
原来的Cstring遇到了null终止符是stringAPI的一部分的问题,所以你不能轻易地创build子string而不改变底层string(la strtok
)。 在C ++中,通过单独存储长度并将指针和大小包装到一个类中,可以很容易地解决这个问题。
我所能想到的C ++标准库哲学的一个主要障碍和分歧是,这种“引用视图”类与标准库的其余部分有着完全不同的所有权语义。 基本上,标准库中的所有其他东西都是无条件安全和正确的(如果它编译的话,这是正确的)。 像这样的参考类,这不再是事实。 程序的正确性取决于使用这些类的环境代码。 所以这很难检查和教导。