std::basic_format_string
是否定义了复制或移动构造函数或者这些构造函数是否不存在的信息。
当我查看Microsoft 的 STL 实现时,看起来编译器生成的版本是简单可用的。这是 C++ 标准中定义的吗?
这是您必须直接采用标准的情况之一:
template<class charT, class... Args>
struct basic_format_string {
private:
basic_string_view<charT> str; // exposition only
public:
template<class T> consteval basic_format_string(const T& s);
basic_format_string(runtime-format-string<charT> s) noexcept : str(s.str) {}
constexpr basic_string_view<charT> get() const noexcept { return str; }
};
在
basic_format_string
的定义中,没有声明复制构造函数、移动构造函数、复制赋值运算符或移动赋值运算符,因此所有这些特殊成员函数都是根据有关特殊成员函数的核心语言规则隐式声明的。在这种情况下,由于唯一的数据成员是 basic_string_view<charT>
类型,因此所有四个复制/移动特殊成员函数将简单地复制/移动该数据成员。