gpt4 book ai didi

c++ - 我什么时候会通过 const& std::string 而不是 std::string_view?

转载 作者:IT老高 更新时间:2023-10-28 22:21:27 28 4
gpt4 key购买 nike

我了解使用 std::string_view 的动机;
它可以帮助避免在函数参数中进行不必要的分配。

例如:
以下程序将从字符串文字创建 std::string
这会导致不希望的动态分配,因为我们只对观察字符感兴趣。

#include <iostream>

void* operator new(std::size_t n)
{
std::cout << "[allocating " << n << " bytes]\n";
return malloc(n);
}

void observe_string(std::string const& str){}

int main(){
observe_string("hello world"); //prints [allocating 36 bytes]
}

使用 string_view 即可解决问题:

#include <iostream>
#include <experimental/string_view>

void* operator new(std::size_t n)
{
std::cout << "[allocating " << n << " bytes]\n";
return malloc(n);
}

void observe_string(std::experimental::string_view const& str){
}

int main(){
observe_string("hello world"); //prints nothing
}

这给我留下了一个问题。
我什么时候会选择 std::string by const& 而不是 string_view 作为函数参数?

std::string_view的接口(interface),好像可以替换掉const&<传递的所有std::string的实例。这有什么反例吗? std::string_view 是不是要替换 std::string const& 来进行参数传递?

最佳答案

When would I choose std::string by const& instead of string_view for function arguments?

需要一个以空字符结尾的字符串吗?如果是这样,那么您应该使用 std::string const& ,它可以为您提供保证。 string_view 没有 - 它只是一个 const char 的范围。

如果您不需要需要一个以null结尾的字符串,并且您不需要拥有数据的所有权,那么您应该使用string_view。如果您确实需要拥有数据的所有权,那么按值计算的 string 可能比 string_view 更好。

关于c++ - 我什么时候会通过 const& std::string 而不是 std::string_view?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39564457/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com