为啥只有字符串视图?
Posted
技术标签:
【中文标题】为啥只有字符串视图?【英文标题】:Why only string view?为什么只有字符串视图? 【发布时间】:2017-03-26 01:25:48 【问题描述】:C++17 的字符串视图为开发人员提供了一种将廉价的非拥有引用传递给实际上可以是faster than const std::string&
的字符串的方法。我可能很天真,但这听起来与 Java 的复制对象的 references 的内置机制非常相似。像 Integer 和 String 这样的内置包装器是不可变的。 Java 的“引用”机制可以保证这些对象在程序的整个生命周期中都将保持相同的值。区别在于 C++,string_view
在这样的程序中是显式的:
void retrieve_an_object (string_view sv)
这比 Java 令人惊讶的(对 C++ 开发人员而言)机制更具自我记录性。但是对于标准和库编写者来说,为 C++ 中每个可以想象的类编写视图类无疑是一个巨大的负担。 C++ 是否可以有一种更专用的方式将对象标记为“仅限视图”而无需编写整个类,如果是这样,为什么不考虑这一点?
【问题讨论】:
这不是std::string
的视图,而是连续字符序列的视图。它具有大部分std::string
接口,因为这是一致的。
const type&
是向类提供仅视图接口的最快方法。 string_view
很特别,因为当您没有 std::string
时会使用它。
Why string_view instead of generalized container_view<T>?的可能重复
【参考方案1】:
视图类(string_view
、array_view
)旨在授予(只读)访问它们所呈现对象的部分的权限。
就像const &
带有关于不同开始和结束的附加信息。
C++ 有一个专用的方式来查看对象:const &
。 (以及std::reference_wrapper<const T>
)
如果您只想访问某些数据结构的特定部分,则需要一个专用的视图类,该类知道应该使哪些部分可用,这本身并不是真正可推广的。
【讨论】:
以上是关于为啥只有字符串视图?的主要内容,如果未能解决你的问题,请参考以下文章
为啥只有拉丁字符的 Java 字体声称支持亚洲字符,即使它不支持?
MySql cursor.execute() 只有一个参数:为啥要将字符串切片到列表中?
为啥 React 只有当它们是变量时才将 undefined/boolean/null 解析为字符串?