【问题标题】:How to convert an std::string_view to std::string? [duplicate]如何将 std::string_view 转换为 std::string? [复制]
【发布时间】:2021-08-11 00:23:48
【问题描述】:

std::string_view 是 C 中 char* 的替代品。它是一个不会从一个地方复制到另一个地方的字符串,就像 char* 只是内存中不时引用的一个地方一样。

但是,有时我们需要将其转换为字符串以供接受字符串的函数使用。

我该怎么做?

【问题讨论】:

  • @SergeyA 如果这个网站上没有答案,我不会反对这个。 std::string 构造函数是显式的,所以初学者可能会感到困惑,为什么不输入std::string 就不能用字符串视图构造字符串。
  • @GuillaumeRacicot 但有:)

标签: c++


【解决方案1】:

std::string 具有接受std::string_view 作为输入的构造函数,例如:

std::string_view sv{...};
std::string s1{sv};
std::string s2{sv, index, length};

或者,您可以使用接受char* 和长度作为输入的std::string 构造函数,例如:

std::string_view sv{...};
std::string s1{sv.data(), sv.size()};
std::string s2{sv.data()+index, length};

【讨论】:

    【解决方案2】:

    std::string 作为构造函数,但只是一个显式构造函数。

    void f(std::string s);
    
    std::string_view sv;
    f(sv); // Error! Cannot convert implicitly
    f(std::string{sv}); // Works fine.
    

    这样设计是为了防止意外的内存分配。

    请参阅std::basic_string::basic_string (10) 的文档

    【讨论】:

      【解决方案3】:

      只需使用std::string的构造函数:

       std::string{my_string_view}
      

      【讨论】:

        猜你喜欢
        • 2021-12-04
        • 1970-01-01
        • 2020-12-09
        • 2021-12-10
        • 2017-10-31
        • 2013-03-20
        • 1970-01-01
        • 1970-01-01
        • 2015-01-07
        相关资源
        最近更新 更多