【问题标题】:Difference between std::basic_string_view<T> and std::span<T>std::basic_string_view<T> 和 std::span<T> 之间的区别
【发布时间】:2021-07-10 07:47:54
【问题描述】:

我正在解析二进制网络数据,我希望尽可能减少分配过程。但现在我意识到有 2 个非常相似的概念可能对我的情况都足够好,它们是 std::basic_string_view&lt;T&gt;std::span&lt;T&gt;

所以我想知道。这两者之间有什么区别,使用其中一个有什么优势?一个明显的区别是可用性,std::basic_string_view 已经在 C++17 中,而 std::span 是 C++20(但您可以使用“指南支持库”中的旧标准)。但是还有别的吗?应该这样做,否则它们都不会成为标准。

【问题讨论】:

  • string_viewspan&lt;char const&gt; 并且有很多字符串“便利功能”
  • 正如@dyp 提到的,string_view 的 API 的操作类似于 std::string 提供的操作,即 substr、copy、find 等。
  • vectorbasic_string 存在的原因相同
  • @AlanBirtles basic_string 至少保证空终止。 string_view 不是这样(是否计划使用以 null 结尾的 string_view?)

标签: c++ string-view guideline-support-library


【解决方案1】:

string_view 旨在用于文本数据。 span 旨在用于任意对象数组。虽然两者都不是完全适合二进制数据,string_view 显然不适用。

【讨论】:

  • 我说的是basic_string_view,而不是string_view。第一个是模板,第二个是该模板的一个特定实例,带有T=char
  • 答案适用于basic_string_view 及其所有实例。
  • 可能要提一下Traits参数
  • @Sneftel 我看不出basic_string_view&lt;uint8_t&gt; 为何不适用于二进制数据,imo 它非常适用。
猜你喜欢
  • 2023-04-11
  • 2016-01-19
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 2014-06-12
  • 2021-06-02
相关资源
最近更新 更多