什么时候应该在接口中使用string_view?
我正在使用一个内部库,该库旨在模仿拟议的C ++库,并且在过去几年中的某个时候,我看到其接口已从使用更改std::string为string_view。 因此,我忠实地更改了代码,以适应新的界面。不幸的是,我必须传递的是std :: string参数,以及返回的std :: string值。所以我的代码从这样的事情改变了: void one_time_setup(const std::string & p1, int p2) { api_class api; api.setup (p1, special_number_to_string(p2)); } 至 void one_time_setup(const std::string & p1, int p2) { api_class api; const std::string p2_storage(special_number_to_string(p2)); api.setup (string_view(&p1[0], p1.size()), string_view(&p2_storage[0], p2_storage.size())); } 除了更多的代码(可能搞砸了)之外,我真的看不到这种变化给我作为API客户端带来了什么。API调用不太安全(由于API不再拥有其参数的存储空间),可能保存了我的程序0的工作(由于编译器现在可以进行移动优化),即使确实保存了工作,也只能在启动后或在某个地方的大循环中,将不会并且永远不会完成的一些分配。不适用于此API。 但是,这种方法似乎遵循我在其他地方看到的建议,例如,以下答案: 顺便说一句,从C ++ 17开始,您应该避免传递const std :: string&,而推荐使用std :: …