1

我正在阅读 string_view 的源代码,发现 operator== 按值接受参数。

template<typename _CharT, typename _Traits>
    constexpr bool
    operator==(basic_string_view<_CharT, _Traits> __x,
               basic_string_view<_CharT, _Traits> __y) noexcept
    { return __x.size() == __y.size() && __x.compare(__y) == 0; }

为什么它按值接受参数,而不是通过 const 引用?

4

2 回答 2

2

为什么 string_view::operator== 按值接受参数

因为这是传递未修改的参数的推荐方法,并且复制起来很便宜。

无需支付引用引入的间接成本 - 也就是说,在大多数情况下,该函数将内联扩展,在这种情况下它并不重要。

通过引用传递不是更便宜吗?

一般来说:这取决于。如果是字符串视图:可能不是。

于 2020-06-03T14:05:34.110 回答
0

您可以通过 const ref/ref 传递 string_view,但复制 string_view 很便宜。按值传递是最直接和推荐的方式。

于 2020-06-03T14:30:20.773 回答