最近,在代码审查中,我遇到了传递引用的std::string_view
参数。例如以下代码:
void fun(std::string_view a);
变成
void fun(std::string_view& a);
我认为以下几点令人困扰:
- 现在只能使用
l-value
std::string_view
来调用。 - 使用
std::string_view
的核心目的是避免复制底层字符串,因此我认为使用&
没有意义。
std::string_view
参数声明为按引用传递是否有任何优势?
const&
?如果没有const
,那么语义上会有很大的不同,原始对象在被调用方内是可变的,因此我期望fun
会改变操作数的状态。const&
类型在不变性方面更接近于按值传递,但仍然不完全相同。如果你对状态的承诺与按值传递相同,即根本不可能发生任何变化,并且你考虑使用引用只是为了提高性能,那么我同意 @StoryTeller 在另一个问题中的答案涵盖了你的主题。 - luk32