C++17标准的§13节说:
"一个平凡类是满足以下条件的类:其可以被平凡复制并且具有一个或多个默认构造函数(15.1),其中所有构造函数都是平凡或已删除,至少有一个构造函数不是被删除的。"
我无法想出一个好的例子,以便更好地理解这种措辞。那么“至少有一个构造函数不是被删除的”部分是什么意思呢?一个平凡类的默认构造函数是否可以包含多个“未被删除”的构造函数?如果是,则这些“未被删除”的构造函数必须是平凡的(根据上述措辞)但似乎又不可能。
C++17标准的§13节说:
"一个平凡类是满足以下条件的类:其可以被平凡复制并且具有一个或多个默认构造函数(15.1),其中所有构造函数都是平凡或已删除,至少有一个构造函数不是被删除的。"
我无法想出一个好的例子,以便更好地理解这种措辞。那么“至少有一个构造函数不是被删除的”部分是什么意思呢?一个平凡类的默认构造函数是否可以包含多个“未被删除”的构造函数?如果是,则这些“未被删除”的构造函数必须是平凡的(根据上述措辞)但似乎又不可能。
示例:
struct Foo
{
Foo() = default; // #1 default constructor, trivial, not deleted
template <class... Args>
Foo(Args...) = delete; // #2 default constructor, deleted
};
static_assert(std::is_trivial_v<Foo>);
auto test()
{
Foo f{}; // OK
}
具有一个或多个默认构造函数
#1和#2都是默认构造函数(参见[class.default.ctor])
其中所有构造函数均为平凡或已删除
#1是平凡的,#2是已删除的
其中至少有一个未被删除
#1未被删除
[class.default.ctor]
X类的默认构造函数是指具有每个非函数参数包含默认实参的X类构造函数(包括没有参数的构造函数的情况)。[...]