我有以下帮助函数,它接受一个字符串视图并在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
?
答案 0 :(得分:2)
您需要在API链中正确传播您的需求和期望。您的低级代码需要一个std::string
;它无法与其他任何东西一起工作。因此,需要通过与其交互的代码以及与其他代码交互的代码来传播。
当该字符串的最终使用者可以使用string_view
或其指针+大小组件(或者消费者打算复制字符串时)时,使用string_view
。如果它不能与string_view
一起使用,那么您就无法使用它。