在 c++/c++11 中测试“POD-ness”?

2024-01-09

我有一些代码,它采用打包的 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(使用前将#替换为@)

在 c++/c++11 中测试“POD-ness”? 的相关文章

随机推荐

  • 从 git 中提取文件名的 Bash 脚本发生了什么变化

    我正在尝试获取所有已更改的 js 文件的列表 以了解要重新缩小的内容 我之前问过this https stackoverflow com questions 9361496 save a modified log right before
  • 在R中使用fromJSON读取json文件时出错

    我在使用读取 json 文件时遇到问题jsonlite fromJSON 它显示错误消息如下 fromJSON file jsonfile names 1 中的错误 意外字符 N 这是一个问题NaNjson 文件中的值 如果我删除或更改所有
  • Django 模板的依赖文件放在哪里?

    我的 Django 模板使用了很多相关的东西 图像 样式表等 我应该把这些文件放在哪里 或者我应该如何在模板本身中引用它们 目前我正在使用开发服务器 我知道这是很常见的事情 但我无法真正弄清楚 我把它们放在一个名为的文件夹中static 位
  • 如何更改 Castor 映射以从 XML 输出中的元素中删除“xmlns:xsi”和“xsi:type”属性?

    如何更改 Castor 映射
  • Excel 公式优化

    我不是 Excel 专家 经过一些研究 我想出了这个公式来查看不同时间的两组相同数据 然后 它会显示最新数据列表中但不在旧列表中的新条目 这是我的公式 IF ROWS L 4 L8 lt SUMPRODUCT ISNA MATCH E 1
  • ViewModel 中的 INotifyPropertyChanged 与 DependencyProperty

    在模型 视图 视图模型架构 WPF 应用程序中实现 ViewModel 时 如何使其可数据绑定似乎有两个主要选择 我见过使用的实现DependencyProperty对于视图将要绑定的属性 我已经看到 ViewModel 实现INotify
  • 将参数传递给 jQuery“加载”

    我的页面上有一些脚本 divMenuHolder load menu html 不过 我还需要能够传递一些在 menu html 页面上起作用的参数 我尝试过以下方法 divMenuHolder load menu html opt1 te
  • 无需离开页面/网站即可提交外部表单

    我在网站上查找了这个问题的答案 但没有找到我需要的东西 这很接近 除了它实际上没有提交表单 防止表单重定向或提交时刷新 https stackoverflow com questions 1263852 prevent form redir
  • 全屏显示窗口

    如何在全屏播放电影时显示窗口而不退出电影播放器 的全屏模式 我只是想让窗口出现在电影的顶部 我知道这是可能的 因为雅虎信使每次显示皮尔逊已登录或退出时都会执行此操作 并且我确信还有其他程序也可以执行此操作 但我现在不记得了 它可以在 C C
  • Laravel - 使用外部请求时 POST 数据为空

    我是 Laravel 的新手 我正在尝试实现一个简单的 REST API 我已经实现了控制器 并通过单元测试进行了测试 我的问题是 POST 请求 通过测试 Input json 有数据 通过外部 REST 客户端返回 null 这是单元测
  • 使用m2e插件在eclipse中Maven项目依赖错误(适用于maven)

    我正在 eclipse 中使用 m2e 插件开发 java maven 项目 我更新了我的系统 我的jvm从icedtea bin 6 1 11 4更新到icedtea bin 6 1 11 5 Eclipse 现在在我的 pom 文件中输
  • 学习 UI 和网站设计设计 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么没有与unicode“箭头指向右侧然后向上弯曲”等效的向左指向?

    AFAICT 来自http unicode table com en sets arrows symbols http unicode table com en sets arrows symbols 没有与 unicode 等价的从左向上
  • 创建像 C# 属性一样的 javascript 属性

    是否可以在 javascript 对象上创建一个行为类似于 C 中的属性的属性 例子 我使用 dojo 创建了一个自动调整大小的文本区域小部件 为了从我的小部件中获取 value 属性 我连接了 onchange 事件 并且每次文本区域的值
  • 适用于 HEVC 的 Android MediaCodec

    我正在研究使用 android MediaCodec 类来解码 HEVC 有这样做的项目示例吗 目前我使用以下配置解码器 AMEDIAFORMAT KEY MIME video hevc AMEDIAFORMAT KEY MAX HEIGH
  • 使用 iPhone SDK 中的 MFMailComposer 附加纯文本文件

    我一直在尝试使用 MFMailComposer 发送其中包含加密数据的文本文件 问题是当电子邮件到达收件箱时我的附件永远不会显示 相反 一行 br br 总是存在 我假设这与 mime 类型有关 并且接收者邮件服务器不知道如何读取数据 但我
  • C++ 读取缓冲区大小

    假设该文件的长度为 2又 1 2 块 块大小为 1024 aBlock 1024 char buffer new char aBlock while myFile eof myFile read buffer aBlock do more
  • 如何与表单一起验证和创建相关对象

    我试图在使用表单创建对象基础对象时验证相关对象 ForeignKey 相关对象可能存在也可能不存在 下面我使用 MPTT 但这是一个一般的外键问题 我有一个这样的模型 model class MyMPTTModel models Model
  • 为什么 cython 内存视图不能被 pickle?

    我有一个使用内存视图数组的 cython 模块 即 double foo 我想使用多处理并行运行该模块 但是我收到错误 PicklingError Can t pickle
  • 在 c++/c++11 中测试“POD-ness”?

    我有一些代码 它采用打包的 POD 结构 类并将其复制到内存块中 struct A int a int b a memcpy mymemoryblock void a sizeof A later I get a reply and mem