const string&与string_view的区别

在函数传参时,分别使用const string&与string_view,string_view是如何指向所对应的字符串(是通过地址还是什么方法?)如果是地址,为何string_view的效率比const strig&要高?
//刚才查了资料,string_view包含两个字段,分别是第一个字符的地址,和长度,那const string&包含了原字符串的什么内容?

c++

3个回答

最关键区别
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(){
    }
};

liuyi1998818
Crazy灬Bang丶Sky 回复churuxu: 谢谢大佬 明白了
8 个月之前 回复
churuxu
churuxu 回复Crazy灬Bang丶Sky: string存字符串本身,字符串多长,就至少需要多大内存,string_view存指针,只需要sizeof(void*)字节。const string& 跟string区别作用是传参数时减少一次构造。
8 个月之前 回复
liuyi1998818
Crazy灬Bang丶Sky 请问const string& 分配的内存存储的是什么,也是地址吗?这个地址跟string_view的有什么区别
8 个月之前 回复

string_view是什么东西

string view (叫做_view的string)
还是
string
view(自己定义了一个叫做string_的类)

string是只读的,传参相当于传指针。

liuyi1998818
Crazy灬Bang丶Sky 回复: 我想知道传引用的话,是传入了string首位的地址跟末尾下一位的地址这两个字段是吗?
8 个月之前 回复
liuyi1998818
Crazy灬Bang丶Sky string_view是c++17里面的新添加的,是一个处理只读字符串的轻量对象
8 个月之前 回复

const string& 是常引用,引用是实参的别名,即形参和实参相同;const限定在被调函数中不能修改该参数的值;
string_view 也是传递地址和长度,也限定不能在被调函数中修改传递过来的字符数组值。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐