联合体中可以定义多个不同类型的成员,这些成员变量共享一块内存空间,C++11以前为了与C兼容,对于联合体内的数据类型进行了很多限制,C++11后取消了这些限制

在C++11之前是不允许联合体中包含非POD类型的,而在C++11之后取消了这种限制。

POD类型在上一遍博客中有叙述C++11 POD类型_xiangyuhaoaizcm的博客-CSDN博客

class A {
public:A(int x, int y) :aa(x), bb(y) {}
private:int aa;int bb;
};union T {A a;double f;
};

上面的联合体T包含类型A的变量a,类型A因为包含了非平凡的构造函数,所以为非POD类型。

当然取消这种限制是有条件的

如果非受限联合体内有一个非 POD 的成员,而该成员拥有自定义的构造函数,那么这个非受限联合体的默认构造函数将被编译器删除;其他的特殊成员函数,例如默认拷贝构造函数、拷贝赋值操作符以及析构函数等,也将被删除。


非受限联合体的匿名声明和枚举式类

联合体T内定义了一个匿名联合体,这个联合体称为匿名联合体

union T {union {int a;};
};

非受限联合体运用于类的声明时,这样的类被称为枚举式类

class Student {
public:Student(bool g, int a) : gender(g), age(a) {}bool gender;int age;
};
class Singer {
public:enum Type { STUDENT, NATIVE, FOREIGENR };Singer(bool g, int a) : s(g, a) { t = STUDENT; }Singer(int i) : id(i) { t = NATIVE; }Singer(const char* n, int s) {int size = (s > 9) ? 9 : s;memcpy(name, n, size);name[s] = '\0';t = FOREIGENR;}~Singer() {}
private:Type t;union {Student s;int id;char name[10];};
};
int main() {Singer(true, 13);Singer(310217);Singer("J Michael", 9);return 0;
}

非受限联合体--non-trivial union相关推荐

  1. matlab 联合体,C++11非受限联合体(union)

    在 C/C++ 中,联合体(Union)是一种构造数据类型.在一个联合体内,我们可以定义多个不同类型的成员,这些成员将会共享同一块内存空间.老版本的 C++ 为了和C语言保持兼容,对联合体的数据成员的 ...

  2. 联合体(共用体) union 的深入理解

    1.联合类型的定义: 联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体). //联合类型的声明 union Un { char c; ...

  3. C语言联合体/共用体/union,枚举使用大全

    文章目录 一.前言 二.联合体 1.联合体基础 2. 联合体的使用方法和使用场景 2.1 多种访问内存途径共存 2.2 联合体union和大小端(big-endian.little-endian) 2 ...

  4. 深入理解C++11 读书笔记(三) 通用与专用

    继承构造函数 如果派生类并不需要改变构造函数,那么可以用新的using Base::Base直接继承基类的构造函数,基类构造函数很多的时候,这样做非常方便.如果派生类还有自己的成员需要初始化,可以利用 ...

  5. C++11_学习笔记

    Vector(std::initializer_list<double>)  //{1.2,12.3,111.2} 关键字virtual的意思是可能随后在其派生类中重新定义:含有纯虚函数的 ...

  6. 面试知识总结(八股、网络、LINUX)

    问题 变量的声明和定义 C++中extern "C" 的作用 了解C++中编译时的优化 C++的特点是什么 C++的异常处理机制 C和C++,java的区别 C++ 11 null ...

  7. C++11、C++14、C++17、C++20新特性总结(5万字详解)

    文章目录 C++ 11是什么,C++ 11标准的由来 C++ auto类型推导完全攻略 auto 类型推导的语法和规则 auto 的高级用法 auto 的限制 auto 的应用 使用 auto 定义迭 ...

  8. C语言中文网-CPP11

    1. C++ 11是什么,C++ 11标准的由来 Bjarne Stroustrup Simula 2. C++ auto类型推导 auto声明推导多个变量时,不能有二义性 定义时必须马上初始化 au ...

  9. 深入理解C++11pdf

    下载地址:网盘下载 内容简介  · · · · · · <深入理解C++11:C++11新特性解析与应用>内容简介:国内首本全面深入解读C++11新标准的专著,由C++标准委员会代表和IB ...

最新文章

  1. Nature:寻找记忆的痕迹
  2. 三种途径助物联网改变业务 省心省时省成本
  3. 【迁移学习(Transfer L)全面指南】迁移学习中的bottlenecks(瓶颈层)
  4. mfc 弹簧_弹簧活性样品
  5. java 聚合_Java聚合
  6. 浏览器字体大小设置_CSS之 浏览器解析样式的过程
  7. PHP递归删除目录面试题,PHP 递归删除目录中文件
  8. SpringBoot2.0都更新了那些内容
  9. Windows的空格预览神器 | QuickLook
  10. Domino9下web群组维护添加log维护记录
  11. 【1stopt】批处理拟合
  12. 优秀,起诉网站,可尼玛太秀了
  13. JVM调优命令-jstat
  14. office 365 excel 遇到问题 需要修复
  15. React:Redux和Flux
  16. 求求你们,别再刷 Star 了!这跟“爱国”没关系!
  17. 数字图像处理第二章----数字图像基础
  18. Java数据结构之中缀表达式转后缀表达式
  19. 英伟达NX+rplidar S1 +cartographer
  20. 企业印章管控新模式:集中管控、分散使用

热门文章

  1. 《机器学习》西瓜书课后习题4.3——python实现基于信息熵划分的决策树算法(简单、全面)
  2. 计算机房 危险源辨识,危险源辨识风险评价和风险控制实施方案.doc
  3. SN Write 使用说明
  4. chown r mysql ._chown -R命令的使用
  5. 快速定位线上CPU100%原因
  6. 若依-用户长时间未修改密码强制修改
  7. 淘宝双11数据分析与预测汇总
  8. C# 定时执行方法
  9. word 文档中嵌入和链接OLE 对象|Packager-对象包装程序
  10. centos8代理上网_CentOS如何设置各种代理上网?