std::basic_string_view<T> 和 std::span<T> 之间的区别

You*_*008 7 c++ string-view guideline-support-library

我正在解析二进制网络数据,我希望使该过程尽可能减少分配。但现在我意识到有两个非常相似的概念可能都足够适合我的情况,它们是std::basic_string_view<T>std::span<T>

所以我想知道。这两者之间有什么区别?使用其中一种比另一种有什么优势?一个明显的区别是可用性,std::basic_string_viewC++17 中已存在,而std::spanC++20 中已存在(但您可以使用“指南支持库”中的旧标准)。但还有别的事吗?应该如此,否则它们就不会同时进入标准。

Sne*_*tel 1

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

  • @Sneftel我不明白“basic_string_view&lt;uint8_t&gt;”如何不适用于二进制数据,在我看来它非常适用。 (4认同)
  • 我说的是“basic_string_view”,而不是“string_view”。第一个是模板,第二个是该模板的一个特定实例,其中包含“T=char”。 (2认同)
  • 答案适用于“basic_string_view”及其所有实例。 (2认同)