如何通过值或常量引用传递 std::string_view

Posted

技术标签:

【中文标题】如何通过值或常量引用传递 std::string_view【英文标题】:How to pass std::string_view by value or by const reference 【发布时间】:2019-10-15 14:57:43 【问题描述】:

通常string_view用于这样的函数参数:

void fval(std::string_view sv);
void fcref(std::string_view const &sv);

哪个更好?

const 引用是 8 个字节,string_view 通常是它的两倍,例如16 字节。

但是,如果不进行内联或优化,const 引用可能有两种间接方式 - 一种用于 ref,第二种用于内部指针。

STL 是怎么做到的?

【问题讨论】:

有趣的是,为什么不投反对票,没有评论?我可以详细说明两种方式至少 1 小时。 一个向下,三个向上。 (我还不能称之为趋势,但是......);-) 【参考方案1】:

我们通常按值传递string_views。

来自 C++20 草案的示例:

Formatting Time Zone Lookup

【讨论】:

我正要问谁是“我们” :) 谢谢马歇尔! 一些解释为什么这可能很好:)

以上是关于如何通过值或常量引用传递 std::string_view的主要内容,如果未能解决你的问题,请参考以下文章

SWIG:如何包装 std::string&(通过引用传递的 std::string)

为什么std :: runtime_error的c'tor采用对std :: string的常量引用?

C ++通过引用dll中的函数传递std :: string

如何返回 std::string 的常量视图?

函数/变量范围(通过值或引用传递?)

通过值或引用传递容器