答案很大程度上取决于类的使用方式以及涉及的 C++ 版本:
该类将具有非零大小,以便指针算术起作用并且它们的数组元素将是不同的。
assert(sizeof(empty_class_t) != 0)
Run Code Online (Sandbox Code Playgroud)如果您构造了任何构造函数,则该类将具有默认构造函数。
empty_class_t e;
Run Code Online (Sandbox Code Playgroud)如果您复制任何,该类将具有默认的复制构造函数。
empty_class_t f(e);
Run Code Online (Sandbox Code Playgroud)类将有一个默认的复制赋值运算符,如果你赋值的话。
empty_class_t g = f;
Run Code Online (Sandbox Code Playgroud)在 C++11 中,该类将有一个默认的移动构造函数(如果您使用它)。
empty_class_t h(std::move(g));
Run Code Online (Sandbox Code Playgroud)在 C++11 中,该类将具有默认的移动赋值运算符(如果您使用它)。
empty_class_t j; j = std::move(h);
Run Code Online (Sandbox Code Playgroud)我想我已经掌握了所有的用法 - 有人让我知道任何 booboos,请。
有关一般何时为类生成这些的详细信息,请参阅此答案,但基本上只有在编译器可以做一些明智的事情并且在您的代码中使用它们时才会生成它们;如果无法生成但未使用这些默认成员之一,则编译器不需要失败。