c 结构体 不允许使用不完整的类型_C++11 POD 类型学习

本文介绍了C++11中的POD(Plain Old Data)类型,包括普通类型和标准布局类型的定义及判断。POD类型在源码层面兼容ANSI C,允许使用memset、memcpy等C函数进行操作。文章通过实例展示了不同类型对象的内存布局和拷贝特性。
摘要由CSDN通过智能技术生成

POD(Plain Old Data,普通旧数据)类型是从 C++11 开始引入的概念

  • Plain 代表一个对象是一个普通类型
  • Old 代表一个对象可以与 C 兼容

通俗地讲,一个类、结构、共用体对象或非构造类型对象能通过二进制拷贝(如 memcpy())后还能保持其数据不变正常使用的就是POD类型的对象。

严格来讲,一个对象既是普通类型(Trivial Type)又是标准布局类型(Standard-layout Type)那么这个对象就是 POD 类型。

不同类型的对象意味着对象的成员在内存中的布局是不同的。

在某些情况下,布局是有规范明确的定义,但如果类或结构包含某些 C++ 语言功能,如虚拟基类、 虚函数、 具有不同的访问控制的成员,则不同编译器会有不同的布局实现,具体取决于编译器对代码的优化方式,比如实现内存对齐,减少访存指令周期。

例如,如果类具有虚函数,该类的所有实例都会包含一个指向虚函数表的指针,那么这个对象就不能直接通过二进制拷贝的方式传到其它语言编程的程序中使用。

C++ 给定对象类型取决于其特定的内存布局方式,一个对象是普通、标准布局还是 POD 类型,可以根据标准库函数模板来判断:

is_trivial<T> 
is_standard_layout<T> 
is_pod<T>

使用时需要包含头文件<type_traits>

普通类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值