当前位置: 首页 > news >正文

【C++ 面试 - 基础题】每日 3 题(十五)

✍个人博客:Pandaconda-CSDN博客

📣专栏地址:http://t.csdnimg.cn/fYaBd

📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

43. C++ 中的模板元编程是什么?它有哪些应用场景?

为了谈应用,先谈谈使命。模板元编程的根在模板。模板的使命很简单:为自动代码生成提供方便。提高程序员生产率的一个非常有效的方法就是 “代码复用”,而面向对象很重要的一个贡献就是通过内部紧耦合和外部松耦合将 “思想” 转化成一个一个容易复用的 “概念”。但是面向对象提供的工具箱里面所包含的继承,组合与多态并不能完全满足实际编程中对于代码复用的全部要求,于是模板就应运而生了。

模板是更智能的宏。模板和宏都是编译前代码生成,像宏一样,模板代码会被编译器在编译的第一阶段(在内部转,这点儿与预编译器不同)就展开成合法的 C++ 代码,然后根据展开的代码生成目标代码,链接到最终的应用程序之中。模板与宏相比,它站在更高的抽象层上面,宏操作的是字符串中的 token,然而模板却能够操作 C++ 中的类型。所以模板更加安全(因为有类型检查),更加智能(可以根据上下文自动特化)。

说完模板,来说说模板元编程。模板元编程其实就是复杂点儿的模板,简单的模板在特化时基本只包含类型的查找与替换,这种模板可以看作是 “类型安全的宏”。而模板元编程就是将一些通常编程时才有的概念比如:递归,分支等加入到模板特化过程中的模板,但其实说白了还是模板,自动代码生成而已。

所有你需要存储、操纵、搜索类型的地方,都是模板元编程的用武之地。

假如我们需要做类型的映射,我们还需要用这些类型构造出对象。那么我们可以构造一颗编译期的平衡搜索树,存储这些(接收类型:返回类型)的映射。我们可以很方便地查找、获取、使用类型。如果你用一个哈希表存储类型名字的 string 的话,且不说效率低下的问题,查找获取类型当然也是可以的,但是得到的只是类型名字的 string,如何使用这个类型呢?反射?很麻烦吧。

44. float 是如何存储的,补码反码相关问题 

计算机是以浮点数的形式存储小数的,大多数计算机都是 IEEE 754 标准定义的浮点数格式,包含三个部分:

  • 符号位:表示数字是正数还是负数,为 0 表示正数,为 1 表示负数;

  • 指数位:指定了小数点在数据中的位置,指数可以是负数,也可以是正数,指数位的长度越长则数值的表达范围就越大;

  • 尾数位:小数点右侧的数字,也就是小数部分,比如二进制 1.0011 x 2^(-2),尾数部分就是 0011,而且尾数的长度决定了这个数的精度,因此如果要表示精度更高的小数,则就要提高尾数位的长度;

用 32 位来表示的浮点数,则称为单精度浮点数,也就是我们编程语言中的 float 变量,而用 64 位来表示的浮点数,称为双精度浮点数,也就是 double 变量。

  

45. 为什么负数要用补码表示?

负数之所以用补码的方式来表示,主要是为了统一和正数的加减法操作一样,毕竟数字的加减法是很常用的一个操作,就不要搞特殊化,尽量以统一的方式来运算。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PostgreSQL-02-入门篇-查询数据
  • 《全面解析 Nginx:从下载安装到高级应用与问题解决》
  • Linux 操作系统 --- 信号
  • 【项目】基于Vue2+Router+Vant 前端面经项目
  • 你知道Windows下的linux的神器WSL吗?
  • 【VRPCB】Python+Gurobi求解运输问题建模实践三
  • 景联文科技:图像标注的类型有哪些?
  • 【网络安全】SSO登录过程实现账户接管
  • 【网络通信】关于TCP和HTTP
  • 【MybatisPlus】创建Mapper接口继承BaseMapper接口
  • Linux 与 Windows 服务器操作系统 | 全面对比
  • 什么是DevUI?
  • 美股收涨,半导体板块领涨;苹果iPhone出货预测上调
  • 无人机之螺旋桨的安装与维护
  • 卫星图像检测,分割,跟踪,超分辨率,数据集调研
  • 【RocksDB】TransactionDB源码分析
  • 【刷算法】求1+2+3+...+n
  • 2019年如何成为全栈工程师?
  • Java面向对象及其三大特征
  • JS数组方法汇总
  • Median of Two Sorted Arrays
  • Python实现BT种子转化为磁力链接【实战】
  • ReactNative开发常用的三方模块
  • v-if和v-for连用出现的问题
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • Yii源码解读-服务定位器(Service Locator)
  • 从零开始学习部署
  • 基于Android乐音识别(2)
  • 记录一下第一次使用npm
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 微信开放平台全网发布【失败】的几点排查方法
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 用mpvue开发微信小程序
  • 智能合约Solidity教程-事件和日志(一)
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • "无招胜有招"nbsp;史上最全的互…
  • ######## golang各章节终篇索引 ########
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #控制台大学课堂点名问题_课堂随机点名
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (zhuan) 一些RL的文献(及笔记)
  • (办公)springboot配置aop处理请求.
  • (差分)胡桃爱原石
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (转) ns2/nam与nam实现相关的文件
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)fock函数详解
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...