与sizeof(Base) != sizeof(Derived)
的区别在于,存在多个与此问题非常相似的问题。出于显而易见的原因,这将不起作用(应用于指针的下标运算符是相对于pointes的大小,而不是相对于实际的整数类型)。但是,我想知道这段代码是否正确:
struct Base
{
int Data;
};
struct Derived : public Base
{
};
int main()
{
static_assert(sizeof(Base) == sizeof(Derived), "Sizes are not equal");
Derived Data[10];
Base* Ptr = Data;
Ptr[3].Data = 5;
}
显然,由于大小相等,所以
Ptr[3]
将不再访问任何一半的Base
实例,但是代码仍然正确吗? 最佳答案
是的,这是正确的(在定义明确的意义上,不一定是理智的),因为这两个类是布局兼容的-它们是具有相同非静态数据成员的标准布局结构。
但是它非常脆弱。对类进行小的更改可能会破坏兼容性并产生不确定的行为。
关于c++ - 派生对象数组到基础对象数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26527937/