POD
简旧数据类型 (PODType)
来自C ++标准的技术术语。 “Plain Ol'Data”的缩写:POD-struct是一个聚合类,它没有指向成员,非POD-struct,非POD-union(或此类类型的数组)的指针类型的非静态数据成员或引用,没有用户定义的拷贝赋值运算符,也没有用户定义的析构函数。 类似地,POD-union是一个聚合联合,它没有指向成员,非POD结构,非POD联合(或此类类型的数组)或引用的类型指针的非静态数据成员,并且没有用户 - 定义的拷贝赋值运算符,没有用户定义的析构函数。 POD类是POD结构或POD结合的类。 聚合是一个数组或类(第9节),没有用户声明的构造函数,没有私有或受保护的非静态数据成员,没有基类,没有虚函数。
Plain old data structure, 缩写为POD, 是C++语言的标准中定义的一类数据结构,POD适用于需要明确的数据底层操作的系统中。POD通常被用在系统的边界处,即指不同系统之间只能以底层数据的形式进行交互,系统的高层逻辑不能互相兼容。比如当对象的字段值是从外部数据中构建时,系统还没有办法对对象进行语义检查和解释,这时就适用POD来存储数据。
POD类型包括下述C++类型,以及其cv-qualified的类型,还有以其为基类型的数组类型:
- 标量类型(scalar type)
- POD类类型(POD class type)
其它与POD相关的C++特性:
- 内存布局——POD对象的组成字节是连续的
- 初始化——对于non-const POD对象,如果没有初始化声明时,具有不确定的初值(indeterminate initial value) . POD对象的缺省初始化为0值. 静态POD对象初始化为给定的初值,如果是局部静态POD对象,在进入所在作用域之前初始化; 对于非局部静态POD对象,在任何动态初始化之前赋予初值.
- 拷贝——POD对象可直接拷贝(例如用memcpy())到其它字符数组或相同POD类型的对象,保持其值不变[20]。POD类型可以用作标准模板字符串类的字符. 由于这个原因,函数的返回值如果是non-POD类型,则不能通过寄存器传递函数的返回值。
- 寻址——一个POD对象的地址可以是一个地址常量表达式;一个对POD成员的引用可以是一个引用常量表达式. 一个POD-struct对象的指针,适合用reinterpret_cast转换到它的初始值.
ODR:“一个定义规则”
它表示C ++程序中的任何实体必须在构成程序的所有编译单元(目标文件)中具有相同的定义。
ODR 规则的冲突通常显示为链接器错误。 当同一名称在不同的翻译单元中具有两个不同的定义时,将发生链接器错误。
函数或成员函数接受的参数个数。 除非另有说明,否则在指定元数时不会计算隐藏this
成员函数的参数。
Null-Terminated Byte String或'C'-string。 C ++字符串文字是ntbs类型。 ntbs绝不能为空。
引发raise
Python中的异常是“引发”而不是“抛出”,因为它们在C ++中。 当本文档说在C ++代码的上下文中“引发”某些Python异常时,这意味着通过Python/‘’C’ throw_error_already_set()
设置相应的Python异常,并调用throw_error_already_set()
。