【发布时间】:2012-08-27 07:11:54
【问题描述】:
我有一些代码采用打包的 POD 结构/类并将其复制到内存块中。
struct A
{
int a;
int b;
} a;
memcpy(mymemoryblock, (void *)&a, sizeof(A));
// later I get a reply and...
memcpy((void *)&a, mymemoryblock, sizeof(A));
这仅对 POD 类型的数据有效,我想知道是否有一种方法可以测试 POD 性。如果有人不小心将成员函数添加到该类中,则 memcpy 操作将变为无效,但仍可编译。这导致很难检测到错误。
是否有 is_POD_type(A) 函数或其他可用于在运行时或编译时检测 POD 的技巧?
【问题讨论】:
-
请注意,在 C++11 中,以这种方式使用
memcpy的类型可以简单地复制就足够了。此属性的关联特征是std::is_trivially_copyable,或者您可以使用std::is_trivial,它是一个超集(libstdc++ 已经实现了后者,但没有实现前者)。 -
一个小问题:POD 类允许包含非虚拟成员函数(和静态成员函数)。