std :: string_view是否可以复制?

问题描述 投票:5回答:1

对于某些类型,标准明确声明它们可以轻易复制。例如,std::chrono::day就是这样一种类型。

但是,对std::string_view来说,没有这样的说法。然而,它似乎满足了易于复制的要求(或者我可能忽略了某些东西?)。

问题是,我能指望std::string_view可以轻易复制吗?

c++ language-lawyer c++17
1个回答
6
投票

我相信这是强烈暗示的。

[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)。

© www.soinside.com 2019 - 2024. All rights reserved.