如何将 std::string_view 转换为 std::string?

时间:2021-05-21 18:57:06

标签: c++

std::string_view 是 C 中 char* 的替代品。它是一个不会从一个地方复制到另一个地方的字符串,就像 char* 只是内存中的一个地方,它不时被引用时间。

但是,对于接受字符串的函数,有时我们需要将其转换为字符串。

我该怎么做?

3 个答案:

答案 0 :(得分:3)

std::string 具有接受 std::string_view 作为输入的构造函数,例如:

std::string_view sv{...};
std::string s1{sv};
std::string s2{sv, index, length};

或者,您可以使用接受 std::string 和长度作为输入的 char* 构造函数,例如:

std::string_view sv{...};
std::string s1{sv.data(), sv.size()};
std::string s2{sv.data()+index, length};

答案 1 :(得分:2)

一个 std::string 作为它的构造函数,但只是一个显式的构造函数。

void f(std::string s);

std::string_view sv;
f(sv); // Error! Cannot convert implicitly
f(std::string{sv}); // Works fine.

这样设计是为了防止意外的内存分配。

查看 std::basic_string::basic_string (10) 的文档

答案 2 :(得分:0)

只需使用 std::string 的构造函数:

 std::string{my_string_view}