std::string_view已经使它成为C++ 17,并且它被广泛推荐使用它代替const std::string&.
其中一个原因是表现.
有人可以解释与用作参数类型相比,究竟 std::string_view是什么/将会更快const std::string&?(假设在被叫方中没有副本)
通过string_view使用C ++ 17,我们得到了一种便宜的方法,该方法将std::string和传递char*给不占用字符串所有权并避免制作临时副本的函数。通过使用std::string按值传递,std::move我们可以为r值和l值引用显式快速地传递字符串所有权。
我的问题是:const std::string&在新的C ++标准中用作任何函数参数有什么好处?
我发现新C++ 17标准的string_view有点多余.
我们有一个非常详细的简单机制集合,用于将数据传递给被调用者,没有太多开销,现在又有一个也只针对一种容器类型.
我不明白为什么只为字符串提供这种机器而不是为其他容器提供更普遍的类型.一个明智的答案是我们已经有了这些解决方案.例如,在C++ 17及更高版本中,演示文稿string_view被解释为observer_ptr<T> (or T*) for string.
与C++ 17引入的string_view相比,请说明针对更通用的container_view的参数.
我一直在研究该std::string_view库,并且一直在考虑更改我一直在努力使用的代码库std::string_view。但是,在我阅读过的许多主题中,有关何时何地使用std::string_view而不是的主题const std::string &。我已经看到许多答案说:“何时不需要以null结尾的字符串。” 因此,当我开始在网上搜索“何时需要以null结尾的字符串?”时,在这个问题上,我还没有真正有用的答案。
我可以想到一个外部库的示例,您需要链接到该外部库std::string。在那种情况下,您将需要一个以null结尾的字符串,因为该库需要它。我猜另一个例子是,如果您需要修改字符串本身,但是const &如果我们需要修改它,那么我们就不会通过。
那么什么时候需要使用以null结尾的字符串?
我看过的链接: