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 也是传递地址和长度,也限定不能在被调函数中修改传递过来的字符数组值。