const string&与string_view的区别
问题描述:
在函数传参时,分别使用const string&与string_view,string_view是如何指向所对应的字符串(是通过地址还是什么方法?)如果是地址,为何string_view的效率比const strig&要高?
//刚才查了资料,string_view包含两个字段,分别是第一个字符的地址,和长度,那const string&包含了原字符串的什么内容?
答
最关键区别
string要分配自身内存,将字符串拷贝到自身的内存
string_view不分配内存,只是一个指针指向字符串内存
string 与 string_view 对比,类似:
(不同编译器有不同实现,但基本原理类似)
class string {
char* str_;
int len_;
int max_len_;
string(const char* str, int len){
max_len_ = len + 16;
len_ = len;
str_ = malloc(max_len_);
memcpy(str_, str, len);
}
~string(){
free(str_);
}
};
class string_view {
char* str_;
int len_;
string_view(const char* str, int len){
str_ = str;
len_ = len;
}
~string_view(){
}
};
答
string_view是什么东西
是
string view (叫做_view的string)
还是
string view(自己定义了一个叫做string_的类)
string是只读的,传参相当于传指针。
答
const string& 是常引用,引用是实参的别名,即形参和实参相同;const限定在被调函数中不能修改该参数的值;
string_view 也是传递地址和长度,也限定不能在被调函数中修改传递过来的字符数组值。