代码之家  ›  专栏  ›  技术社区  ›  jeanluc

STD:String视图在传递到STD::字符串的另一个函数时的优点

  •  4
  • jeanluc  · 技术社区  · 6 年前

    我有以下助手函数,它接受字符串视图并返回 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 本来是为了方便字符串传递,但是如果我必须从中构造一个字符串,而不管函数的主体是什么,那么定义 getOpCount 用一个 string_view 参数?或者,如果不是慢到 const std::string&

    1 回复  |  直到 6 年前
        1
  •  2
  •   Nicol Bolas    6 年前

    您需要在API链上正确地传播您的需求和期望。你的低级代码 std::string 它不能和其他东西一起工作。因此,这种需求应该通过与之交互的代码以及与他人交互的代码传播。

    你使用 string_view 当该字符串的最终使用者可以使用 字符串视图 或者其指针+大小组件(或者使用者打算复制字符串,不管如何)。如果它不能与 字符串视图 那么你就不能用它了。