1.c++空类包含什么?
-
默认构造函数:如果没有定义任何构造函数,编译器会自动生成一个默认构造函数。
-
默认析构函数:编译器会自动生成一个默认析构函数。
-
复制构造函数:编译器会自动生成一个复制构造函数。
-
复制赋值运算符:编译器会自动生成一个复制赋值运算符。
-
移动构造函数(C++11及以后):在C++11及以后的版本中,如果没有定义复制操作或析构函数,编译器会自动生成移动构造函数。
-
移动赋值运算符(C++11及以后):在C++11及以后的版本中,如果没有定义复制操作或析构函数,编译器会自动生成移动赋值运算符。
-
隐式定义的
this
指针:每个非静态成员函数都有一个隐式的this
指针。 -
类型信息:编译器会为类生成必要的类型信息。
-
对齐信息:类会有对齐要求,即使是空类
2.c++空类大小
虽然空类没有任何成员变量,但它并非完全没有大小。C++ 标准规定,任何对象(包括空类的实例)都必须有非零大小。这是为了确保在数组中,每个对象都有唯一的地址。
在大多数编译器和平台上,空类的大小是 1 字节。分配 1 字节是为了满足最小大小原则。这个字节通常不存储任何有意义的信息,仅用于为对象提供唯一的内存地址。
可以通过代码查看空类大小:
#include<iostream>
using namespace std;
class EmptyClass{};
int main(){
cout << "Size of EmptyClass :" << sizeof(EmptyClass) << "byte(s)" << endl;
return 0;
}
其中,sizeof
是 C++ 中的一个运算符,用于获取类型或表达式的字节大小。其返回一个 size_t
类型(通常是无符号整型)的值,表示字节数。