这基本上是my prior question的延续。
这是C ++ 14中的[class] / 7:
标准布局类是一个类:
请考虑以下代码段:
struct B{ int i; };
struct A : B{ int j; };
A
满足要点(7.1)至(7.4),但不满足(7.5),因为A
具有非静态数据成员并且具有基类非静态数据成员。
A
作为标准布局类有什么问题?
修改
据我所知accepted answer这个被认为是欺骗的问题,如果我试图将指针A
投射到基类B
的第一个数据成员,然后返回,因为这个句子是由OP写的:
Within a class, members are allocated in increasing addresses according to the declaration order. However C++ doesn't dictate the order of allocation for data members across classes.
但这似乎没有回答我的问题。例如,假设在某个编译器实现中,基类B
将跟随内存中的struct A
,而不是在它之前。但根据[conv.ptr] / 3,这会与从指向派生类的指针到指向基类的指针进行隐式转换相矛盾:
类型为“指向cv D的指针”的prvalue,其中D是类类型,可以是 转换为“指向cv B指针”类型的prvalue,其中B是基数 D级(第10条)。
也就是说,如果基座B
在内存中跟struct A
,则上述隐式转换将无效。
答案 0 :(得分:0)
直接回答问题:
本项目的目的是允许非常简单的继承案例,其中只有一个的类具有数据成员。
继承的数据布局未指定,因此标准可以完全禁止继承,但如果一个类具有 no 数据来将结果视为标准布局,则标准会出现异常。