std :: string_view是否可以复制?

gez*_*eza 5 c++ language-lawyer c++17

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

但是,因为std::string_view没有这样的说法.然而,它似乎满足了轻微可复制的要求(或者我可能忽略了某些东西?).

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

Bar*_*rry 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
};
Run Code Online (Sandbox Code Playgroud)

并且[objects.within.classes]说:

为了便于说明,一些子条款为符合类的外部规范的类的私有成员提供代表性声明和语义要求.对这些成员的声明之后是注释,仅以博览会结束,如:

streambuf* sb;  // exposition only
Run Code Online (Sandbox Code Playgroud)

实现可以使用提供等效可观察行为的任何技术.

是否std::string_view确切地包含两个类型char const*和/ size_t或类型的成员是未指定的 - 但是类必须具有与此类实现的行为方式相同的可观察行为.这样的实现可以轻易地复制.

此外,声明了许多成员函数constexpr,它们本身在C++ 17中需要进行简单的破坏(否则,这个注释将是格式错误的NDR).