我有一些代码,它采用打包的 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) 函数或其他一些可用于在运行时或编译时检测 PODness 的技巧?
std::is_pod<A>::value
在 C++11 中。
[编辑:请参阅上面 Luc 的评论,在 C++11 中,您不需要将类型设为 POD 来完成您正在做的事情。
就此而言,您也不需要投射到void*
,以及 C 风格转换指针void*
不必要的有点冒险,因为有一天你会抛弃const
意外地!]
在 C++03 中没有标准的方法来做到这一点,但 Boost 有自己的方法is_pod
对于不提供非标准方法来查找的编译器,这是错误的。因此,如果您正在编写 POD 特殊情况是优化的代码(您只是不会在所有地方都得到优化),那么它会很有用。如果您只关心 Boost 可以获得准确答案的编译器,它也很有用。如果漏报的话那就不太好了is_pod
导致你的代码厌恶地放弃。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)