std::string_view 是 C 中 char*
的替代品。它是一个不会从一个地方复制到另一个地方的字符串,就像 char* 只是内存中的一个地方,它不时被引用时间。
但是,对于接受字符串的函数,有时我们需要将其转换为字符串。
我该怎么做?
答案 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.
这样设计是为了防止意外的内存分配。
答案 2 :(得分:0)
只需使用 std::string
的构造函数:
std::string{my_string_view}