定义
当 C++ 中的类或结构具有编译器提供的或显式默认设置的特殊成员函数时,该类或结构为普通类型。
特点
- 占用连续内存区域。
- 可以具有含不同访问说明符的成员。
- 在 C++ 中,编译器可以自由选择在这种情况下如何对成员进行排序。
因此,你可以在内存中复制此类对象,但不能从 C 程序中可靠地使用它们。 可以将普通类型 T 复制到 char 或无符号 char 数组,并安全地复制回 T 变量。 由于对齐要求,类型成员之间可能存在填充字节。
一般形式
普通类型具有普通默认构造函数、普通复制构造函数、普通复制赋值运算符和普通析构函数。 在各种情况下,“普通”意味着构造函数/运算符/析构函数并非用户提供,并且属于存在以下情况的类
-
没有虚拟函数或虚拟基类,
-
没有具有相应非普通构造函数/运算符/析构函数的基类
-
没有具有相应非普通构造函数/运算符/析构函数的类类型的数据成员
示例
以下示例演示普通类型。 在 Trivial2 中,Trivial2(int a, int b)
构造函数的存在要求提供默认构造函数。 对于符合普通资格的类型,必须显式默认设置该构造函数。
struct Trivial
{
int i;
private:
int j;
};
struct Trivial2
{
int i;
Trivial2(int a, int b) : i(a), j(b) {}
Trivial2() = default;
private:
int j; // Different access control
};
网友评论