结构继承VS在C级继承++(Struct inheritance vs class inherita

2019-08-01 19:12发布

我刚刚从这个发现Q / A是结构是可继承在C ++中,但它是一个很好的做法,或者是它最好使用类? 在这种情况下,最好在哪些不是?

我从来没有这个需要,但现在我有很多不同类型的消息,但同一经度。 我让他们在二进制在字符数组,我只是他们的memcpy复制到结构,以填补其字段(我不知道,甚至有可能用的std ::复制这样做)。

我想这将是巨大的,能够继承与共同头基本结构的每个结构,这就是为什么我搜索了这一点。 所以第二个问题是:如果我这样做带班,是有可能做的memcpy(或std:复制)从缓冲区一类?

Answer 1:

是否可以使用按位拷贝,因此没有任何关系与structclass标签,只取决于是否说structclass is_trivially_copiable 。 无论它们是在标准被定义(9/6 [类]),并且它基本上可以归结为没有声明任何其它特殊成员方法比构造函数

逐位拷贝然后通过标准允许3.9 / 2 [basic.types]

对于任何对象(比基类的子对象等)平凡复制的类型的T ,对象是否保持类型的有效值T ,组成该对象的底层字节(1.7)可以被复制到的阵列charunsigned char 。 如果阵列的内容charunsigned char被复制回对象,该对象随后应保持其原始值。 [ 实施例:

 #define N sizeof(T) char buf[N]; T obj; // obj initialized to its original value std::memcpy(buf, &obj, N); // between these two calls to std::memcpy, // `obj` might be modified std::memcpy(&obj, buf, N); // at this point, each subobject of `obj` // of scalar type holds its original value 

末端示例 ]

注:填充字节按位拷贝将导致Valgrind的报告。

使用std::copy到同样的效果:

char const* b = reinterpret_cast<char const*>(&obj);
std::copy(b, b + N, buf);


Answer 2:

唯一的区别structclass是默认的访问修饰符给会员。 在structpublicclassprivate (直到另有说明)。 除此之外structclass在C ++相同。 有时结构者优先用于PDO(普通数据对象)在类的可读性,但是这真的取决于编码约定。



文章来源: Struct inheritance vs class inheritance in C++