对于某些类型,标准明确声明它们是微不足道的可复制的。例如,std::chrono::day就是这样一种类型。
但是,对std::string_view来说,没有这样的说法。然而,它似乎满足了琐碎的可复制性的要求(或者我可能忽略了什么?)
问题是,我能不能相信std::string_view是微不足道的可复制的?
发布于 2018-09-01 17:47:54
我相信这是很明显的暗示。
[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)是微不足道的可复制的。
https://stackoverflow.com/questions/52130667
复制相似问题