为什么只有字符串视图?

use*_*039 2 c++

C ++ 17的字符串视图为开发人员提供了一种方法,可以将便宜的非所有者引用传递给实际上比更快const std::string&的字符串。我可能很天真,但这听起来很像Java内置的复制对象引用的机制。像Integer和String这样的内置包装器是不可变的。Java的“引用”机制使您可以保证这些对象在程序的整个生命周期中都具有相同的值。区别在于C ++,string_view在这样的程序中很明显:

void retrieve_an_object (string_view sv) {
}
Run Code Online (Sandbox Code Playgroud)

这比Java令人惊讶的(对C ++开发人员而言)机制更具自我证明性。但是对于标准和库编写者来说,为C ++中每个可能的类编写一个视图类无疑是一个巨大的负担。C ++也许可以有一种更专用的方式将对象标记为“仅查看”,而不必编写整个类;如果这样,为什么将其从考虑中删除?

Dar*_*ter 5

视图类(string_viewarray_view)旨在(只读)访问它们所呈现的对象部分
就像const &带有有关不同开始和结束的其他信息的。

C ++有一种专用的方式来查看对象:const &。(以及std::reference_wrapper<const T>

如果只想访问某些数据结构的特定部分,则需要一个专用的视图类,该类知道应提供哪些部分,这实际上并不能推广。