POD (程 序 设计)
Plain old data structure, 缩写为POD,
定 义
编辑
POD类型
- 标量类型(scalar type)
- POD类类
型 (POD class type)
標 量 類型
编辑
算 术类型 (arithmetic type)枚 举类型 (enumeration type)指 针类型 (pointer type)指標 到 成員 類型 (pointer-to-member type)
术语
整数 类型(integral type)- 浮点类型(floating type)
术语
有 符号 整数 类型 (signed char, short, int, long),- 无符
号 整数 类型(unsigned char, unsigned short, unsigned int, unsigned long), 字 元 類型 char與 寬 字 元 類型 wchar_t布 林 類型 bool。
术语浮点类型
术语
空 指標 pointer-to-void (void *),對象 指標 pointer-to-object與 指向 靜態 數 據 成員 的 指標 pointer-to-static-member-data (都 是 形 如為T*,其中T是 對象 類型 ),函數 指標 pointer-to-function與 指向 靜態 成員 函數 的 指標 pointer-to-static-member-function (都 是 形 如T (*)(...),T是 函數 的 返 回 值的類型 ).
指標 到 非 靜態 數 據 成員 (pointer-to-nonstatic-member-data),形 如T C::*表示 指向 類 C的 類型 為 T的 數 據 成員 的 指標 ;指標 到 非 靜態 成員 函數 (pointer-to-nonstatic-member-functions),形 如T (C::*)(...)表示 指向 類 C的 返 回 值類型 為 T的 成員 函數 的 指標 .
POD类类型
编辑
POD类类
指 针到成 员类型 的 非 静 态数据 成 员(包括 数 组)。非 POD类类型 的 非 静 态数据 成 员(包括 数 组)。引用 类型的 (reference type)非 静 态数据 成 员。用 户定义的拷贝与赋值算 子 。用 户定义的析构函数 。
术语聚合
用 户定义的构造函数 。私有 或 保 护的非 静 态数据 成 员。基 类。虚 函数 。
C++11
编辑C++11
类型
有 平凡 的 缺 省 构造函数 ,可用 这样的 默 认语法 :(SomeConstructor() = default;)有 平凡 的 copy与 move构造函数 ,可用 默 认语法 .有 平凡 的 copy与 move运算符 ,可用 默 认语法 .有 平凡 的 destructor,不能 是 虚 函数 .
构造
类型
没 有 虚 函数 没 有 虚 基 类所有 非 静 态数据 成 员有相 同 的 访问控 制 (public, private, protected)所有 非 静 态数据 成 员,包括 在任 何 基 类中的 ,存在 于类继承体系 中 的 一 个类中 上述 规则适用于所有 基 类与类继承体系 中 的 所有 非 静 态数据 成 员没 有 同 一类型的基类型被定义为第一个非静态数据成员
用途
编辑
POD类型
一个例子是下述C++
POD类型T | non-POD类型T | |
---|---|---|
new T | ||
new T() | 总是 | |
new T(x) | 总是调用构造 |
其它与POD
内 存 布 局 ——POD对象的 组成字 节是连续的 [11].
"POD-struct ... types are layout-compatible if they have the same number of members, and corresponding members (in order) have layout-compatible types"[12].
POD-union ... types are layout-compatible if they have the same number of members, and corresponding members (in any order) have layout-compatible types"[13].
初 始 化 ——对于non-const POD对象,如果没 有 初 始 化 声明 时,具有 不 确定的 初 值(indeterminate initial value) [14]. POD对象的 缺 省 初 始 化 为0值[15].静 态POD对象初 始 化 为给定 的 初 值,如果是 局部 静 态POD对象,在 进入所在 作用 域 之 前 初 始 化 [16][§6.7, ¶4]; 对于非 局部 静 态POD对象,在任 何 动态初 始 化 之 前 赋予初 值[17].- 拷贝——POD对象
可 直接 拷贝(例 如用memcpy())到 其它字 符 数 组或相 同 POD类型的 对象,保持 其值不 变[18]。POD类型可 以用作 标准模 板 字 符 串 类的字 符 [19].由 于这个原因 ,函数 的 返 回 值如果 是 non-POD类型,则不能 通 过寄存 器 传递函数 的 返 回 值。 - 寻址——
一 个POD对象的 地 址 可 以是一个地址常量表达式[20];一 个对POD成 员的引用 可 以是一个引用常量表达式[21].一 个POD-struct对象的 指 针,适合用 reinterpret_cast转换到它的初 始 值[22].
POD JAVA
编辑JAVA
参 见
编辑
参考 文献
编辑
- ^ ISO/IEC 14882, first edition, 1998-09-01 p. 5, footnote 4]
- ^
参 见C++标准的 §3.9, ¶10; §9, ¶4 - ^
參 見 C++標準 §3.9, ¶10 - ^ 4.0 4.1
参 见C++标准§3.9.1, ¶8 - ^
参 见C++标准§3.9.1, ¶7 - ^
参 见C++标准§3.9.1, ¶1; §7.2, ¶1 - ^ 7.0 7.1
參 見 C++標準 §3.9.2, ¶1 - ^
参 见C++标准§9, ¶4 - ^
参 见C++标准§8.5.1, ¶1 - ^
参 见C++标准§5.3.4, ¶15 - ^
参 见C++标准§1.8, ¶5 - ^
参 见C++标准§9.2, ¶14 - ^
参 见C++标准§9.2, ¶15 - ^
参 见C++标准§8.5, ¶9 - ^
参 见C++标准§8.5, ¶5 - ^
参 见C++标准§6.7, ¶4 - ^
参 见C++标准§3.6.2, ¶1 - ^
参 见C++标准§3.9, ¶2与 3 - ^
参 见C++标准§21, ¶1 - ^
参 见C++标准§5.19, ¶4 - ^
参 见C++标准§5.19, ¶5 - ^
参 见C++标准§9.2, ¶17