C++ 概念: StandardLayoutType
来自cppreference.com
指定一个类型为标准布局类型。标准布局类型适用于与其他语言书写的代码交流。
注意,标准没有定义拥有此名称的具名要求或概念。这是语言核心定义的类型。将它包含于此只是为了一致性。
目录 |
[编辑] 要求
- 全部非静态数据成员必须拥有同一访问控制
- 无虚函数或虚基类
- 无引用类型的非静态数据成员
- 所有非静态数据成员和基类自身是标准布局类型
|
(C++14 前) |
struct Q {}; struct S : Q { }; struct T : Q { }; struct U : S, T { }; // 非标准布局类
struct B { int i; }; // 标准布局类 struct C : B { }; // 标准布局类 struct D : C { }; // 标准布局类 struct E : D { char : 4; }; // 非标准布局类
|
(C++14 起) |
[编辑] 属性
见标准布局。
[编辑] 缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
DR | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
CWG 1672 | C++14 | 首个非静态数据成员规则忽略空基类的存在 | 首个非静态数据成员的规则被设为递归 |
CWG 1813 | C++14 | 带有定义在非直接基类的成员的类在技术上不是标准布局 | 所有成员声明必须在同一类中 |
CWG 2120 | C++14 | 作为首个成员的数组在在比较首元素类型和基类类型时不考虑 | 考虑数组元素 |
[编辑] 参阅
(C++11) |
检查是否是一个标准布局类型 (类模板) |