C++中的struct继承与类继承

Rom*_*dgz 4 c++ inheritance struct memcpy

我刚刚从这个Q/A中发现结构在C++中是可继承的,但它是一个好的实践,还是更适合使用类?哪种情况更可取,哪种情况不适合?

我从来没有需要这个,但现在我有一堆不同类型但经度相同的消息.我在char数组中使用二进制文件,我只是将它们与memcpy一起复制到结构中以填充其字段(我不知道是否甚至可以使用std :: copy).

我想能够使用公共头继承基础结构中的每个结构都很棒,这就是我搜索它的原因.所以第二个问题是:如果我用类做这个,是否可以从缓冲区到类中执行memcpy(或std:copy)?

Mat*_* M. 5

是否可以使用按位复制与structor class标签无关,只取决于是否表示structclass is_trivially_copiable.它们是否在标准(9/6 [class])中定义,它基本上归结为不必声明任何其他特殊成员方法而不是构造函数.

然后标准在3.9/2 [basic.types]中允许按位复制

对于具有普通可复制类型的任何对象(基类子对象除外)T,无论对象是否保持有效的类型值,构成对象T的基础字节(1.7)都可以复制到char或的数组中unsigned 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
Run Code Online (Sandbox Code Playgroud)

- 末端的例子 ]

注意:填充字节的按位副本将导致Valgrind中的报告.

使用std::copy相同的效果:

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