C++中空类的编译器会给我们什么?

C++中空类的编译器会给我们什么?,c++,C++,在一次采访中,我被问到一个空的类,编译器为您提供了什么?有谁能告诉我编译器会为空类提供什么?< p>答案很大程度上取决于该类是如何使用的以及C++的版本是什么: 该类将具有非零大小,因此指针算法可以工作,并且它们的数组元素将是不同的 assert(sizeof(empty_class_t) != 0) 如果您构造任何构造函数,则该类将具有默认构造函数 empty_class_t e; 如果复制任何构造函数,则该类将具有默认的复制构造函数 empty_class_t f(e); 该类将具有默

在一次采访中,我被问到一个空的类,编译器为您提供了什么?有谁能告诉我编译器会为空类提供什么?

< p>答案很大程度上取决于该类是如何使用的以及C++的版本是什么:

该类将具有非零大小,因此指针算法可以工作,并且它们的数组元素将是不同的

assert(sizeof(empty_class_t) != 0)
如果您构造任何构造函数,则该类将具有默认构造函数

empty_class_t e;
如果复制任何构造函数,则该类将具有默认的复制构造函数

empty_class_t f(e);
该类将具有默认的复制分配运算符(如果您分配了任何运算符)

empty_class_t g = f;
在C++11中,如果使用该类,则该类将具有默认的移动构造函数

empty_class_t h(std::move(g));
empty_class_t j; j = std::move(h);
在C++11中,如果使用该类,则该类将具有默认的移动赋值运算符

empty_class_t h(std::move(g));
empty_class_t j; j = std::move(h);
我想我的所有用途都是对的——有人告诉我任何嘘声,请告诉我


请参阅,以了解一般情况下为类生成这些代码的详细时间,但基本上,只有当编译器能够做一些合理的事情并在代码中使用它们时,才会生成这些代码;如果其中一个默认成员无法生成但未使用,则不要求编译器失败。

您是指大小还是其他方面?空类就是空类{};?哪个编译器?当你尝试它时发生了什么?你自己看看吧,我知道即使它是空的,大小也会是“1”。但是面试官问了我其他的问题know@kadina到底要什么?尺寸还是别的?你不清楚你的问题的措辞!还有,如果有人知道为什么markdown没有突出显示示例的语法!当您有编号或项目符号时,您必须在它们下面双缩进代码。