c++ - std::string_view 在传递给另一个采用 std::string 的函数时的优点

标签 c++ string c++17

我有以下辅助函数,它接受一个字符串 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/

相关文章:

c++ - 读取文件但跳过一个字符

c++ - boost named_mutex 和 remove() 命令

Python:分割和分析字符串的最有效方法

java - 我的代码中发生了一些奇怪的交互,但我找不到解决方案

c++ - 将参数传递给模板函数的方法

c++ - 斐波那契和 'if constexpr'

c++ - 实现 "window"系统和 "no deletion of self"规则

c++ - PCL : How to delete deviations from a point cloud?

android - onSaveInstanceState 回调如何保存一个 SpannableString

c++ - 衰减到基类