• POD C++


    Plain Old Data https://zh.cppreference.com/w/cpp/named_req/PODType

    简言之,针对POD对象,其二进制内容是可以随便复制的,在任何地方,只要其二进制内容在,就能还原出正确无误的POD对象。对于任何POD对象,都可以使用memset()函数或者其他类似的内存初始化函数。

    这表示该类型与用于 C 程序语言的类型兼容,即能直接以其二进制形式与 C 库交互。

    注意:标准中并没有定义具有这个名字的具名要求。这是核心语言所定义的一种类型类别。将它作为具名要求包含于此只是为了保持一致性。

    此类型要求在 C++ 标准中已弃用。其所有使用都已被替换成更为斟酌过的类型要求,例如平凡类型 (TrivialType) (C++20 起)

    要求

    以下之一:

    • 标量类型
    • 满足下列要求的类类型(class 或 struct 或 union):
    • 聚合类型
    • 没有非 POD 的非静态成员;
    • 没有引用类型的成员;
    • 没有用户定义的复制构造函数;
    • 没有用户定义的析构函数
    (C++11 前)

    (C++11 起)

    • 这种类型的数组

    ----------------------------------------------------------------------------------------

    什么是 平凡类型

    要求

    什么是 可平凡复制

    要求

    • 每个复制构造函数均为平凡或弃置的
    • 每个移动构造函数均为平凡或弃置的
    • 每个复制赋值运算符均为平凡或弃置的
    • 每个移动赋值运算符均为平凡或弃置的
    • 至少一个复制构造函数、移动构造函数、复制赋值运算符或移动赋值运算符未弃置
    • 平凡而未弃置的析构函数

    这意味着该类没有虚函数虚基类

    标量类型和可平凡复制 (TriviallyCopyable) 对象的数组也是可平凡复制 (TriviallyCopyable) 的。

    什么是 标准布局类型(StandardLayoutType)

    指定一个类型为标准布局类型。标准布局类型适用于与其他语言编写的代码交流

    要求

    • 所有非静态数据成员必须具有相同的访问控制
    • 没有虚函数或虚基类
    • 没有引用类型的非静态数据成员
    • 所有非静态数据成员和基类自身也是标准布局类型
    • 满足以下之一
    • 没有带有非静态数据成员的基类,或
    • 最终派生类中没有非静态数据成员,且至多有一个基类拥有非静态数据成员
    • 没有与首个非静态数据成员类型相同的基类(见空基类优化
    (C++14 前)
    • 不存在两个相同类型的(可能间接的)基类子对象
    struct Q {};
    struct S : Q { };
    struct T : Q { };
    struct U : S, T { }; // 并非标准布局类:有两个 Q 类型的基类子对象
    • 所有非静态数据成员和位域都在同一类中声明(要么全在派生类中,要么全在某个基类中)
    struct B { int i; };         // 标准布局类
    struct C : B { };            // 标准布局类
    struct D : C { };            // 标准布局类
    struct E : D { char : 4; };  // 非标准布局类
    • 不存在与如下各项具有相同类型的基类子对象
    • 对于非联合类型,为其首个非静态数据成员(见空基类优化),递归地,若该数据成员具有非联合类类型,则为其首个数据成员,或者若该数据成员为联合体类型,则为其所有非静态数据成员,或者若该数据成员为数组类型,则为其元素类型,依此递归。
    • 对于联合体类型,为其任何非静态数据成员,递归地,若该数据成员具有非联合类类型,则为其首个数据成员,或者若该数据成员为联合体类型,则为其所有非静态数据成员,或者若该数据成员为数组类型,则为其元素类型,依此递归。
    • 对于数组类型,为数组元素的类型,递归地,若该数据成员拥有非联合类类型,则为其首个数据成员,或者若该数据成员为联合体类型,则为其所有非静态数据成员,或者若该数据成员为数组类型,则为其元素类型,依此递归。
  • 相关阅读:
    浅析count(1)、count(*)与count(列名)的执行区别
    浅析尽量不用count(*)来判断是否有数据、判断记录是否存在 exists 和 top 1 要比 count 快
    浅析MySQL中的计算列(Generated Column列)与计算字段的介绍与应用-如何让数据库中某个字段随时间自动更新
    AcWing 837. 连通块中点的数量
    AcWing 836. 合并集合
    AcWing 143. 最大异或对
    AcWing 835. Trie字符串统计
    AcWing 831. KMP字符串
    P2866 [USACO06NOV]Bad Hair Day S
    P1901 发射站
  • 原文地址:https://www.cnblogs.com/redips-l/p/12298599.html
Copyright © 2020-2023  润新知