- 主题:string_view 这样用有问题吗?
这样用有没有问题?
std::string ss("abc");
std::string_view sv = ss.c_str();
还是说必须下面这样?
std::string ss("abc");
std::string_view sv(ss);
另外, string_view 和 string 之间互相赋值没有问题吧?
比如 ss = sv; sv = ss;
--
修改:speedboy2998 FROM 50.18.88.*
FROM 50.18.88.*
1. std::string_view sv = "abs"就可以,可以参考string_view literal
2. string -> string_view可以,string_view -> string 需要显示
--
FROM 115.193.175.*
区别就是这个:view不是数据的owner,string是数据的owner
view转为string,和Rust的to_owned()一样,是必须要复制数据的。复制的开销高,所以需要使用者明确指定。
--
修改:z16166 FROM 221.218.163.*
FROM 221.218.163.*
没看过string_view的实现,不过轮过一个类似的类。按理说string_view需要知道长度的,所以直接把const char*给它,它可能需要先获取长度的操作(一次遍历开销),所以直接把string给它应该更高效。
【 在 speedboy2998 的大作中提到: 】
: 这样用有没有问题?
:
: std::string ss("abc");
: ...................
--来自微微水木3.5.14
--
FROM 223.104.41.*
string_view 转 string 的时候
string 构造函数支持直接构造吧?
std::strins ss(sv);
不需要 std::strins ss(sv.data(), sv.size()); 对吧?
【 在 z16166 的大作中提到: 】
: 区别就是这个:view不是数据的owner,string是数据的owner
: view转为string,和Rust的to_owned()一样,是必须要复制数据的。复制的开销高,所以需要使用者明确指定。
--
FROM 222.247.18.*
下面那个注释掉的,不能编译
#include <string>
#include <string_view>
int main() {
std::string s1("123");
std::string_view v1(s1);
std::string_view v2 = s1;
std::string s2(v1);
//std::string s3 = v1;
return 0;
}
【 在 speedboy2998 的大作中提到: 】
: string_view 转 string 的时候
: string 构造函数支持直接构造吧?
: std::strins ss(sv);
: ...................
--
FROM 221.218.163.*