我有以下辅助函数,它接受一个字符串 View 并在 unordered_map
中返回一个查找:
int Scanner::getOpCount(std::string_view op) {
auto itr = Parser::opTable.find(op);
}
// in another file:
const static std::unordered_map<std::string, OpEntry> opTable;
这不会编译,因为 find
需要一个字符串参数,所以我找到的唯一解决方案(如果我错了请纠正我)是将 op
包装为字符串{操作}
。然而,让我担心的是 std::string_view
是为了简化字符串传递,但是如果我必须从它构造一个字符串而不考虑函数体,那么有什么好处吗使用string_view
参数定义getOpCount
?或者这是否等同于 const std::string&
?
最佳答案
您需要将您的需求和期望正确传播到您的 API 链中。您的低级代码需要一个std::string
;它不能与其他任何东西一起使用。因此,应该通过与其交互的代码以及与其他交互的代码向上传播这种需求。
当该字符串的最终使用者可以使用 string_view
或其指针+大小组件(或者使用者无论如何都打算复制该字符串)时,您可以使用 string_view
。如果它不能与 string_view
一起使用,那么您就不能使用它。
关于c++ - std::string_view 在传递给另一个采用 std::string 的函数时的优点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50572335/