为何继承A且含B类型成员的类C不属于C++11标准布局类?
类C为何是非标准布局类?
你给出的类C确实违反了C11标准布局类的规则,问题出在你列出的规则6表述不够完整——C11的完整规则是:标准布局类不能以属于集合M(c)的类型作为基类,其中M(c)包含以下类型:
- 类c本身
- 类c的所有基类
- 类c的所有非静态数据成员的类型
- 这些数据成员类型的所有基类
对应到类C的情况:
- M(C)包含C、A(C的直接基类)、B(C的非静态数据成员)
- C的基类是A,而A属于M(C)集合(同时是C的基类,也是C的成员B的非静态数据成员类型),因此违反了这条规则。
直白点说,当一个类的基类类型,出现在它自身的非静态数据成员(或成员的内部类型)中时,这个类就不符合标准布局的要求。
内容的提问来源于stack exchange,提问作者lei hu
相关产品推荐
相关产品推荐

