c++中的trivial

定义

当 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
};

你可能感兴趣的:(c++中的trivial)