某日小二参加XXX科技公司的C++工程师开发岗位5面:

面试官:struct和class有什么区别?

小二:在C++中,struct和class的唯一区别是默认的访问控制。struct默认的成员是public的,而class的默认成员是private的。

面试官:struct、class和union有哪些区别?

小二:union和struct、class在内存布局上不同。union实例的所有成员共享一块内存,这块内存的大小等同于union中成员尺寸最大的一个。

面试官:你能列举一下union适合使用的场合吗?

小二:额。。(我哪知道啊,从来没用过。。)

面试官:好的,回去等通知吧。

对于这三个关键字,相信小伙伴们对前两个关键字并不陌生,但是对于union可能用的会少一些。

union最开始的出现是为了解决内存占用的问题。例如你需要存储一个IP地址,但是你并不知道IP的类型,你需要:

struct IP
{
char ipv4[4];
char ipv6[16];
}; //sizeof(IP) = 20

对于一个IP地址,要么是IPV4要么是IPV6,IPV4和IPV6是互斥的,那么肯定有一块空间是被浪费了。此时我们的union就派上用场了:

union IP
{
char ipv4[4];
char ipv6[16];
}; //sizeof(IP) = 16

第二种用法是可以通过union判断大小端。(当然也可以通过其他方法)

union End
{
unsigned char uc;
unsigned short us;
}; bool is_little_end()
{
End end{0};
end.us = 1;
return end.uc;
}

小端模式的意思是,低位放在低内存,高位放在高内存。而大端正好相反。当我们给us赋值1时,如果是大端,内存中的数据应该是这样的:0x00,0x01,这时候如果取uc的值,只能取到0x00。如果是小端,内存中的数据应该是0x01,0x00,此时取到的uc的值是0x01,返回1(true)。

小伙伴们,你还知道union的其他用法吗?

关注我,带你21天“精通”C++!(狗头)

C++面试八股文:struct、class和union有哪些区别?的更多相关文章

  1. 结构体struct 与 联合union

    1.C语言中的结构体 1.1 定义 结构体是由一系列相同或不同类型的变量组成的集合. struct 结构体名{               //struct为关键字,“结构体名”为用户定义的类型标识. ...

  2. C和C++中结构体(struct)、联合体(union)、枚举(enum)的区别

    C++对C语言的结构.联合.枚举 这3种数据类型进行了扩展. 1.C++定义的结构名.联合名.枚举名 都是 类型名,可以直接用于变量的声明或定义.即在C++中定义变量时不必在结构名.联合名.枚举名 前 ...

  3. Struct 和 Union 的详细区别

    Union: 共用体 Struct:结构体 两者的区别: 1:共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共用体只存放一个被选中的成员, 而结构体则存放所有的成员变量. 2: ...

  4. 《面试八股文》之kafka21卷

    微信公众号:moon聊技术 关注选择" 星标 ", 重磅干货,第一 时间送达! [如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发] 大家好,我是moon,最新一篇面试八股文系 ...

  5. 《面试八股文》之 Redis 16卷

    微信公众号:moon聊技术 关注选择" 星标 ", 重磅干货,第一 时间送达! [如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发] 大家好,我是 moon. redis 作为 ...

  6. 《面试八股文》之 JVM 20卷

    微信公众号:moon聊技术 关注选择" 星标 ", 重磅干货,第一 时间送达! [如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发] 大家好,我是 moon. <面试八股 ...

  7. union和union all的区别

    UNION 写一篇联合查询(把前后两个表的查询结果集合在前表中)首先有个为什么需要 相同记录数?? 记错了.应该是union两张表的查询字段数目要一致,字段类型要相似相同的数据类型,至少是相似,可转化 ...

  8. Oracle之Union与Union all的区别

    如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并在一起显示出来. union和unio ...

  9. union与union all的区别

    首先说下union与join的区别 1.union是以行增加的方式,进行连接:join是以列增加的方式进行连接: 2.union连接查询的两个表的字段必须要一一对应,数目相等:join则没有要求,但是 ...

  10. union与union all 的区别

    Union与Union All的区别 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并 ...

随机推荐

  1. TypeScript 学习笔记 — 类型兼容 (十)

    目录 一.基本数据类型的兼容性 二.接口兼容性 三.函数的兼容性 四.类的兼容性 类的私有成员和受保护成员 五.泛型的兼容性 六.枚举的兼容性 标称类型简短介绍 TS 是结构类型系统(structur ...

  2. 【深入浅出 Yarn 架构与实现】5-1 Yarn 资源调度器基本框架

    资源调度器是 YARN 中最核心的组件之一,它是 ResourceManager 中的一个插拔式服务组件,负责整个集群资源的管理和分配. Yarn 默认提供了三种可用资源调度器,分别是FIFO (Fi ...

  3. 内核不中断前提下,Gaussdb(DWS)内存报错排查方法

    摘要:本文主要讲解如何在内核保证操作不能中断采取的特殊处理,理论上用户执行的sql使用的内存(dynamic_used_memory) 是不会大范围的超过max_dynamic_memory的内存的 ...

  4. ES5新增数组常见方法(indexof/forEach/map/filter)

    新增的数组常见方法:以下说明中,红色为必选参数,蓝色为可选参数 1.indexOf(data,start); 用于返回某个数组或者字符串中规定字符或者字符串的位置: var arr = [" ...

  5. 解决ubuntu 20.04、22.04 即新版本 fcitx 无法使用的问题

    前提 已在系统设置中将fcitx设置为默认 fcitx开机自启 配置的过程不在本文讨论范围之内 开机自启可通过安装gnome-tweaks配置实现 问题分析流程 手动启动fcitx时提示设置XMODI ...

  6. 教你如何通过CodeArts IDE插件调用API,高效合成语音

    摘要:本实验基于华为云自研CodeArts IDE,指导用户通过使用华为云API,来实现一个文字合成语音的应用. 本文分享自华为云社区<通过CodeArts IDE插件调用API,高效合成语音! ...

  7. vue之箭头函数

    目录 说明 解决方法一 重新定义this 解决方法二 使用箭头函数 无参数的箭头函数 有一个参数的箭头函数 有两个参数的箭头函数 有一个参数一个返回值的箭头函数 说明 当在一个方法(函数)里面再定义一 ...

  8. OpenTiny 跨端、跨框架组件库升级TypeScript,10万行代码重获新生

    摘要:一份精心准备的<JS项目改造TS指南>文档供大家参考,顺便介绍TS 基础知识和 TS 在 Vue 中的实践. 本文分享自华为云社区<历史性的时刻!OpenTiny 跨端.跨框架 ...

  9. Django笔记二十三之case、when操作条件表达式搜索、更新等操作

    本文首发于公众号:Hunter后端 原文链接:Django笔记二十三之条件表达式搜索.更新等操作 这一篇笔记将介绍条件表达式,就是如何在 model 的使用中根据不同的条件筛选数据返回. 这个操作类似 ...

  10. KMeans算法与GMM混合高斯聚类

    一.K-Means K-Means是GMM的特例(硬聚类,基于原型的聚类).假设多元高斯分布的协方差为0,方差相同.   K-Means算法思想 对于给定的样本集,按照样本之间的距离大小,将样本集划分 ...