zoukankan      html  css  js  c++  java
  • 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; };  // 非标准布局类
    • 不存在与如下各项具有相同类型的基类子对象
    • 对于非联合类型,为其首个非静态数据成员(见空基类优化),递归地,若该数据成员具有非联合类类型,则为其首个数据成员,或者若该数据成员为联合体类型,则为其所有非静态数据成员,或者若该数据成员为数组类型,则为其元素类型,依此递归。
    • 对于联合体类型,为其任何非静态数据成员,递归地,若该数据成员具有非联合类类型,则为其首个数据成员,或者若该数据成员为联合体类型,则为其所有非静态数据成员,或者若该数据成员为数组类型,则为其元素类型,依此递归。
    • 对于数组类型,为数组元素的类型,递归地,若该数据成员拥有非联合类类型,则为其首个数据成员,或者若该数据成员为联合体类型,则为其所有非静态数据成员,或者若该数据成员为数组类型,则为其元素类型,依此递归。
  • 相关阅读:
    nginx面试题
    解决zabbix图形显示“方块”问题
    echo命令详解
    Ubantu1804更换阿里源
    arp命令
    /boot、/和/swap分区扩容
    windows server 2016 安装 .Net Framework失败解决方案
    报错kernel:NMI watchdog: BUG: soft lockup
    jenkins 常用插件源URL
    jenkins rpm包方式安装
  • 原文地址:https://www.cnblogs.com/redips-l/p/12298599.html
Copyright © 2011-2022 走看看