
c++面经基础知识汇总(类型转换、new/delete/malloc/free、什么是RTTI)
发布日期:2021-05-07 17:59:54
浏览次数:11
分类:原创文章
本文共 1164 字,大约阅读时间需要 3 分钟。
如果同时定义了两个函数,一个带const,一个不带,会有问题吗
不会,相当于函数重载
什么是隐式转换
- 在c++中,不会将两个不同类型的值相加,而是先根据类型转化规则,设法将运算对象统一之后,再求值,上述的类型转化是自动执行的,不需要程序员介入,因此被称作隐式转化
- 隐式转换发生的时机:
- 大多数情况下,比int小的整型将会转化为较大的整数类型
- 在条件中,非布尔类型转换为布尔类型
- 在初始化的过程中,初始值转换为变量类型
- 算数转换:一般来说,会将较小的算数类型转换为较大的算数类型,如int转换为double,float转换为double等
- 数组转换为指针
- 算数类型或指针类型转为布尔类型
- 类类型的转换 ,可以把字面值转换为string等
如果想要取消隐式转化,需要使用explicit进行声明
说说你了解的类型转换
隐式转化和显式转换
请你回答一下new/delete与malloc/free的区别是什么
void *operator new(size_t); //allocate an objectvoid *operator delete(void *); //free an objectvoid *operator new[](size_t); //allocate an arrayvoid *operator delete[](void *); //free an array
上面四个是c++的库函数
- new:当我们使用new的时候,背后完成的工作是
- 调用库函数new,传入参数,开辟一个size_t大小的空间,返回的是这个空间的起始地址
- 调用构造函数,由于上一步开辟的空间是没有初始化的,因此第二部就是调用构造函数,将内存中的数据初始化
- 最后一步就是返回构造好的新的对象的指针
- delete:当使用delete的时候,背后完成的工作是
- 首先是通过指针来调用类的析构函数
- 然后调用上面的库函数,传入的是指针的地址,然后释放对应的内存
- malloc:malloc是c中的库函数,他无法调用类的构造函数,他所做的仅仅是为变量分配内存空间
- free:free是c的库函数,无法调用类的析构函数,他做的仅仅是释放malloc所开辟的内存
什么是RTTI
RTTI(Run Time Type Identification)就是运行时类型识别,产生的原因就是有的时候静态类型与动态类型并不匹配,所以就需要在运行的时候,通过编译器,自动识别应该匹配的类型,比如说虚函数的调用,基类转换为派生类,他是通过typeid和dynamic_cast体现出来的,typeid方法通过type_info来返回指针真正的类型,而dynamic_cast 是将基类的指针或引用安全的转换为转换为其派生类的指针或引用
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年03月28日 19时10分24秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
剑指offer JZ31 整数中1出现的次数
2019-03-04
实现基于scrapy框架的天气预报爬虫hengYangSpaider @572311文
2019-03-04
maven打包指定名称并去除jar-with-dependencies后缀
2019-03-04
Netty4服务端入门代码示例
2019-03-04
操作系统前传第六课--开发中的辅助工具
2019-03-04
Linux系统编程44 信号 - 信号的响应过程分析!!!
2019-03-04
VL53L0x TOF激光测距的 stm32 HAL库驱动代码
2019-03-04
怎么玩LOG4J
2019-03-04
Oracle创建用户,分配表空间
2019-03-04
自定义标签(JSP2.0)简单标签
2019-03-04
MyBatis自定义类型转换器
2019-03-04
机器学习(湖北师范大学教程)-极大似然估计算法
2019-03-04
读《红楼梦》有感
2019-03-04
【C# 重构】—参数化查询, 需要参数,但未提供该参数
2019-03-04
决策树(二)—— ID3和C4.5
2019-03-04
MySQL~教你满分回答什么是数据库索引? 索引的数据结构是什么? 什么是事务?
2019-03-04
操作系统~进程的状态、转换、控制
2019-03-04
操作系统~线程概念以及多线程模型
2019-03-04
数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,时间复杂度均为O(1))
2019-03-04
Python:函数 ----》装饰器函数
2019-03-04