为什么 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 很便宜。按值传递是最直接和推荐的方式。
我正在阅读 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 很便宜。按值传递是最直接和推荐的方式。