【问题标题】:Adding const char* to string_view将 const char* 添加到 string_view
【发布时间】:2021-02-16 11:40:45
【问题描述】:

我有一个string_view

std::string_view view;

我怎样才能在其上附加 const char* 之类的内容?例如:

std::string_view view = "hello";
view += " world"; // Doesn't work

另外,如何创建具有指定大小的string_view? 比如:

std::string_view view(100); // Creates a string_view with an initial size of 100 bytes

【问题讨论】:

  • string_view 只是一个视图。即实际对象在其他地方。所以你只能使用string_view '查看'。不能追加也不能设置大小。
  • 如果 std::string_view 就像一个 char* ,那它有什么意义呢?
  • 它就像一个带长度的 char*。它可以像普通容器一样使用,并且很容易传递函数(采用一个参数而不是两个参数,即 (char*, int))
  • 是这样吗?
  • string_view 被设计用于许多可以使用std::string 的地方,但不需要复制任何数据。它是可迭代的,因此可以与其他接受输入迭代器的容器和算法一起使用。可以在string_view 中轻松创建子视图,而无需复制任何数据。它比原始的char*+int 对更容易使用。

标签: c++ string memory string-view


【解决方案1】:

std::string_view 是一个只读视图,可以查看存储在内存中其他位置的现有char[] 缓冲区,或者可以访问一系列迭代器的chars。您无法将新数据添加到 std::string_view

对于您正在尝试的内容,您需要改用std::string,例如:

std::string s = "hello";
s += " world";
std::string s(100, '\0');

【讨论】:

  • 那么std::string_view 就像一个字符* 有什么意义?
  • string_view 提供了一些使用原始指针的功能/安全性。
  • @ManUser123 关于 size() 参数。 std::string 的缺点是它拥有缓冲区,但优点是它知道 size()。 string_view 通过让用户提供缓冲区同时仍保持快速 size() 查找来解决此问题。
  • @Mikhail 这不仅仅是关于size()string_view 还提供其他有用的功能。搜索、比较、子字符串提取,无需分配新的string 副本等
猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2013-11-09
相关资源
最近更新 更多