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

std::string\u视图是否可以复制?

  •  5
  • geza  · 技术社区  · 6 年前

    std::chrono::day 是这样一种类型。

    但是,为了 std::string_view ,没有这样的说法。然而,它似乎满足了可复制性的要求(或者我忽略了什么?)。

    标准::字符串视图 是可以复制的吗?

    1 回复  |  直到 6 年前
        1
  •  7
  •   Barry    4 年前

    我相信这是强烈的暗示。

    [string.view.template] 将类模板声明为(我将省略所有与此问题无关的内容):

    template<class charT, class traits = char_traits<charT>>
    class basic_string_view {
    public:
      // types
      using const_pointer          = const value_type*;
      using size_type              = size_t;
    private:
      const_pointer data_; // exposition only
      size_type size_;     // exposition only
    };
    

    以及 [objects.within.classes]

    为了说明,有些子类为满足类的外部规范的类的私有成员提供了代表性声明和语义需求。这些成员的声明后面有一条注释,仅以说明结尾,如:

    streambuf* sb;  // exposition only
    

    std::string_view 正好包含两个类型的成员 char const* size_t 或不是未指定的-但类必须具有与此类实现的行为相同的可观察行为。而且这样的实现很容易被复制。

    此外,还声明了许多成员函数 constexpr 它本身在C++ 17中需要微小的破坏(否则,这个注释将是不正确的NDR)。


    现在有个提议, P2251 ,并明确指出 basic_string_view (和 span )都是可以复制的。