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

时间:2018-05-28 19:12:36

标签: c++ string c++17

我有以下帮助函数,它接受一个字符串视图并在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包裹为string{op}。然而,令我担心的是,std::string_view旨在促进更容易的字符串传递,但如果我必须从函数体中构造一个字符串,那么定义{{1}是否有任何好处有一个getOpCount参数?或者这是等效的,如果不慢string_view

1 个答案:

答案 0 :(得分:2)

您需要在API链中正确传播您的需求和期望。您的低级代码需要一个std::string;它无法与其他任何东西一起工作。因此,需要通过与其交互的代码以及与其他代码交互的代码来传播。

当该字符串的最终使用者可以使用string_view或其指针+大小组件(或者消费者打算复制字符串时)时,使用string_view。如果它不能与string_view一起使用,那么您就无法使用它。