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

Why does string_view::operator== accepts parameters by value

我正在阅读 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; }

为什么它按值接受参数,而不是按常量引用?

Why does string_view::operator== accepts parameters by value

因为这是传递未经修改且复制成本低的参数的推荐方式。

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

Isn't passing by reference cheaper?

总的来说:视情况而定。在字符串视图的情况下:可能不是。

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