将通过引用传递的 const std::string 替换为 std::string_view

Replace const std::string passed by reference, with std::string_view

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

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

从它的签名来看,输入类型是通过引用传递的(没有复制)并且不应该被改变(通过 const 前缀)。

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

int func(std::string_view filename);

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

不,它不等价。

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

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

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

所有其他情况使用 std::string_view

会更好

字符串视图和字符串引用之间也存在一些关键差异。

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

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