c++中的pod类型
最早看到POD(plain old data)类型,是在imperfect c++里。我觉得这是一本把我带到c++世界里的一本很重要的书。
书里是这样解释POD的:
1、 所有标量类型(基本类型和指针类型)、POD结构类型、POD联合类型、以及这几种类型的数组、const/volatile修饰的版
本都是POD类型。
2、 POD结构/联合类型:一个聚合体(包括class),它的非static成员都不是pointer to class member、
pointer to class member function、非POD结构、非POD联合,以及这些类型的数组、引用、const/
volatile修饰的版本;
并且,此聚合体不能有用户自定义的构造函数、析构函数、拷贝构造函数.
3、 POD类型可以具有static成员、成员typedef、嵌套struct/class定义和 成员函数/方法。
(C++标准)给出的定义:
将对象的各字节拷贝到一个字节数组中,然后再将它重新拷贝到原先的对象所占的存储区中,此时该对象应该具有它原来的值。
POD类型的特点:
所有POD类型都可以作为union的成员,反之,所有非POD类型都不能作为union的成员。
POD特性利用:
我们可以利用POD类型特性来判断一个类型是否为POD类型:
template<class T> struct must_be_pod
{
union
{
T noname;
};
};
这个模板的意思是,只要类型T是非POD类型,那么编译器将报错,因为T被作为了union的一个成员。
VS2008里的测试代码如下:
class A
{
public:
A(){}
void f() { cout << "A::F" << endl; }
protected:
private:
int i;
int j;
};
template<class T> struct must_be_pod
{
union
{
T noname;
};
};
must_be_pod<A> a; 编译器会报错:1>member 'must_be_pod<T>::noname' of union 'must_be_pod<T>::<unnamed-tag>' has user-defined constructor or non-trivial default constructor
其实POD本质就是与c兼容的数据类型。
c++中的pod类型相关推荐
- 【C/C++ POD 类型】深度解析C++中的POD类型:从理论基础到项目实践
深度解析C++中的POD类型:从理论基础到项目实践 1. C++中的POD类型(Plain Old Data) 1.1 POD类型的定义和特性 Trivial类型 Standard layout类型 ...
- C ++中的POD类型是什么?
我有几次遇到这个术语POD型. 这是什么意思? #1楼 POD代表普通旧数据 - 即没有构造函数,析构函数和虚拟成员函数的类(无论是使用关键字struct还是关键字class ). 维基百科关于POD ...
- C++11中的POD和Trivial
引子 在介绍C++11的文章或者博客中,经常会出现POD类型和Trivial类型的影子.但是POD类型和Trivial类型到底是什么意思呢? POD类型 POD类型的好处 POD类型 粗略上来讲,PO ...
- C++中的trivial和non-trivial构造/析构/拷贝/赋值函数及POD类型
在侯捷的<STL源码剖析>里提到trivial和non-trivial及POD类型,相关知识整理如下. trivial意思是无意义,这个trivial和non-trivial是对类的四种函 ...
- C++ 11 中的POD
POD 是英文中Plain Old Data 的缩写,意如其名. Plain 表示了POD 是普通的类型, C++中常见的类型都是这样的属性,而不像一些存在着虚函数虚继承的类型那么特别. Old 则体 ...
- Kubernetes 中创建 Pod 时集群中到底发生了些什么?
想象一下,如果我想将 nginx 部署到 Kubernetes 集群,我可能会在终端中输入类似这样的命令: $ kubectl run --image=nginx --replicas=3 然后回车. ...
- C++11 POD类型
POD,全称plain old data,plain代表它是一个普通类型,old代表它可以与c兼容,可以使用比如memcpy()这类c中最原始函数进行操作.C++11中把POD分为了两个基本概念的集合 ...
- C++11的POD类型
POD类型的定义 必须是平凡的和有标准布局的. 平凡的构造函数与析构函数是默认的,不起任何作用的.如果自定义了,那么需要声明为default类型的. 使用std::is_trivial进行判别. 标准 ...
- dns提供商主机名_在 Kubernetes 中使用 DNS 和 Headless Service 发现运行中的 Pod
作者:Mattias te Wierik 翻译:Bach(才云) 校对:星空下的文仔(才云).bot(才云) 在 Kubernetes 集群中,Service 是将运行在一组 Pods 上的应用程序公 ...
最新文章
- Pjax是什么以及为什么推荐大家用
- CentOS7中使用Docker安装SVN以及配置账号权限
- 基于CDS view生成的OData服务的metadata是如何加载的
- Hibernate基本概念
- kubernetes系列10—存储卷详解
- Explorer.exe程序在系统中的作用
- 如何使用Python Flask编写Web服务
- Python 进阶 —— 装饰器函数的使用
- (转)关于oracle表空间的规划方法
- CSP2019普及组题解:公交换乘(C++)
- 中国移动--九天毕昇平台使用测试(薅Telsa V100)
- php期末大作业可以做什么,期末要交一个基于php连入数据的大作业
- 什么是适用于iPhone和iPad的iOS最新版本?
- JavaScript 隐式类型转换
- 【软件测试】面试老约不到?软件测试简历项目经验怎么写?论项目经验的重要性......
- 需要安装Directx9.0c以上版本和最新显卡驱动
- 清理完c盘计算机无法重启,电脑的c盘被清理,随后就关机后,在打开,就打不开了,...
- DataPipeline宣布完成数千万元B轮融资,加速构建中国的世界级数据中间件产品
- vue 3D地球 转动
- 【Smooth L1 Loss】Smooth L1损失函数理解
热门文章
- 方法引用_通过类名引用静态成员方法
- SpringBoot_web开发-webjars静态资源映射规则
- 内存溢出与内存泄漏区别
- 非阻塞同步算法与CAS(Compare and Swap)无锁算法
- zsh和bash的切换,默认shell,alias拼接组合多条命令
- head first servlet jsp 学习笔记
- AlarmManager机制和系统唤醒锁的总结
- NSUserDefaults数据保存使用
- 牛客 - 焦糖布丁(线性基+博弈)
- 兰州大学第一届『飞马杯』程序设计竞赛 - ★★飞马祝福语★★(动态dp)