我正在研究C++11中新的、放松的POD定义(第9.7节)。
标准布局类是指:
- 没有非标准布局类(或此类类型数组)或引用类型的非静态数据成员,
- 没有虚函数(10.3)和虚基类(10.1),
- 所有非静态数据成员具有相同的访问控制级别(第11条款),
- 没有非标准布局基类,
- 在最派生类中没有非静态数据成员,而只有一个带有非静态数据成员的基类,或者没有带有非静态数据成员的基类,
- 没有与第一个非静态数据成员相同类型的基类。
我已经突出了让我感到惊讶的部分。
如果我们容忍具有不同访问控制级别的数据成员会出现什么问题?
如果第一个数据成员也是一个基类会出现什么问题?即:
struct Foo {};
struct Good : Foo {int x; Foo y;};
struct Bad : Foo {Foo y; int x;};
我承认这是一种奇怪的结构,但为什么应该禁止Bad
而不是Good
?
最后,如果有多个成员类具有数据成员会出现什么问题?
struct
一直都有所有成员都是public
的特性。C++11现在支持private
了吗? - user195488private
成员的,但在C语言中不行。默认情况下是public
。 - Sven