首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

C++面试基础系列-union

  • 25-02-19 07:40
  • 4371
  • 9643
blog.csdn.net

系列文章目录

总目录链接


文章目录

  • 系列文章目录
    • 总目录链接
  • C++面试基础系列-union
    • 1.union含义
    • 2.union的关键点1
    • 3.union的关键点2
    • 4.union与struct的区别
    • 关于作者


C++面试基础系列-union


1.union含义

在C++中,union是一种特殊的数据类型,它允许在相同的内存位置存储不同的数据类型。union与struct类似,但它的所有成员都共享相同的内存地址。这意味着在任意时刻只能访问union中的一个成员,如果访问了一个新的成员,那么之前存储的值将被覆盖。

union UnionName {
    type1 member1;
    type2 member2;
    ...
    typeN memberN;
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里的type1到typeN是数据类型,member1到memberN是成员变量。

使用union的例子:

union Data {
    int i;
    char c;
    double d;
};

int main() {
    Data data;

    // 存储一个整数
    data.i = 10;
    std::cout << "Integer: " << data.i << "\n";

    // 存储一个字符,这将覆盖data.i的值
    data.c = 'a';
    std::cout << "Character: " << data.c << "\n";

    // data.i的值已经被覆盖,所以输出将不是10
    std::cout << "Integer after storing character: " << data.i << "\n";

    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2.union的关键点1

  • union的所有成员始于相同的内存地址。
  • union的大小等于其最大成员的大小。在上面的例子中,Data的大小将等于一个double的大小,因为double通常比int和char占用更多的字节。
  • union可用于内存对齐和打包,以及访问字节级数据。
  • union不允许有引用类型的成员,也不能有继承或虚函数。
  • union可以用于位域操作,尽管这通常不是推荐的做法。

3.union的关键点2

联合(union)是一种节省空间的特殊的类,一个 union 可以有多个数据成员,但是在任意时刻只有一个数据成员可以有值。当某个成员被赋值后其他成员变为未定义状态。联合有如下特点:

  • 默认访问控制符为 public
  • 可以含有构造函数、析构函数
  • 不能含有引用类型的成员
  • 不能继承自其他类,不能作为基类
  • 不能含有虚函数
  • 匿名 union 在定义所在作用域可直接访问 union 成员
  • 匿名 union 不能包含 protected 成员或 private 成员
  • 全局匿名联合必须是静态(static)的

4.union与struct的区别

  • struct的每个成员都有自己的内存位置,而union的所有成员共享一个内存位置。
  • struct可以有构造函数、析构函数和成员函数,而union不能。
  • struct可以用于继承,而union不能。

union在需要节约内存或需要通过同一个内存位置访问不同类型的数据时非常有用,但使用时需要小心,以避免数据被意外覆盖。


关于作者

  • 微信公众号:WeSiGJ
  • GitHub:https://github.com/wesigj/cplusplusboys
  • CSDN:https://blog.csdn.net/wesigj
  • 微博:
  • -版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
WeSiGJ
微信公众号
共同分享,共同交流, 共同学习!
注:本文转载自blog.csdn.net的WeSiGJ的文章"https://blog.csdn.net/wesigj/article/details/141297077"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top