-1

我有以下方法std::string作为输入参数。

int func(const std::string &filename);

从它的签名来看,输入类型是通过引用传递的(不复制),不应更改(通过const前缀)。

它是否等同于使用std::string_view,它也用于只读?

int func(std::string_view filename);

如果不是,那么它们在哪些方面不相似(运行时、内存消耗、功能等)

4

1 回答 1

1

不,它不等效。

在两种情况下使用std::string const&是更好的选择。

  1. 您正在调用一个需要以空字符结尾的字符串的 C 函数。std::string_view有一个data()功能,但它可能不是以空值终止的。在这种情况下,接收 astd::string const&是一个好主意。

  2. 您需要将字符串保存在某处,或者您正在调用需要std::string const&. 有时它们是不希望更改的库中的函数。

所有其他情况会更好std::string_view

字符串视图和对字符串的引用之间也存在一些关键区别。

首先,您是按引用传递,而不是按值传递。编译器每次想要访问容量、大小或数据时都必须引用它。

其次,字符串视图不使用容量,仅使用大小和数据。这也意味着可以省略加载,因为您将其作为有限范围的局部变量按值传递。

于 2021-11-18T12:32:54.710 回答