博客
关于我
c++面经基础知识汇总(类型转换、new/delete/malloc/free、什么是RTTI)
阅读量:346 次
发布时间:2019-03-04

本文共 1164 字,大约阅读时间需要 3 分钟。

如果同时定义了两个函数,一个带const,一个不带,会有问题吗

不会,相当于函数重载

什么是隐式转换
  1. 在c++中,不会将两个不同类型的值相加,而是先根据类型转化规则,设法将运算对象统一之后,再求值,上述的类型转化是自动执行的,不需要程序员介入,因此被称作隐式转化
  2. 隐式转换发生的时机:
    1. 大多数情况下,比int小的整型将会转化为较大的整数类型
    2. 在条件中,非布尔类型转换为布尔类型
    3. 在初始化的过程中,初始值转换为变量类型
  3. 算数转换:一般来说,会将较小的算数类型转换为较大的算数类型,如int转换为double,float转换为double等
  4. 数组转换为指针
  5. 算数类型或指针类型转为布尔类型
  6. 类类型的转换 ,可以把字面值转换为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++的库函数

  1. new:当我们使用new的时候,背后完成的工作是
    1. 调用库函数new,传入参数,开辟一个size_t大小的空间,返回的是这个空间的起始地址
    2. 调用构造函数,由于上一步开辟的空间是没有初始化的,因此第二部就是调用构造函数,将内存中的数据初始化
    3. 最后一步就是返回构造好的新的对象的指针
  2. delete:当使用delete的时候,背后完成的工作是
    1. 首先是通过指针来调用类的析构函数
    2. 然后调用上面的库函数,传入的是指针的地址,然后释放对应的内存
  3. malloc:malloc是c中的库函数,他无法调用类的构造函数,他所做的仅仅是为变量分配内存空间
  4. free:free是c的库函数,无法调用类的析构函数,他做的仅仅是释放malloc所开辟的内存
什么是RTTI

RTTI(Run Time Type Identification)就是运行时类型识别,产生的原因就是有的时候静态类型与动态类型并不匹配,所以就需要在运行的时候,通过编译器,自动识别应该匹配的类型,比如说虚函数的调用,基类转换为派生类,他是通过typeid和dynamic_cast体现出来的,typeid方法通过type_info来返回指针真正的类型,而dynamic_cast 是将基类的指针或引用安全的转换为转换为其派生类的指针或引用

转载地址:http://fjjr.baihongyu.com/

你可能感兴趣的文章
【55】Kotlin android Anko 神兵利器2
查看>>
git忽略规则以及.gitignore文件不生效解决办法
查看>>
文件md5怎么会变化
查看>>
tablayout 滑动监听
查看>>
ViewModel LiveData 使用初体验
查看>>
Error connecting to the service protoco
查看>>
windows 用户获取管理员权限
查看>>
Flutter 加载本地图片
查看>>
android带气泡的第三方选项卡
查看>>
好玩的editText
查看>>
自动安装服务2
查看>>
edittext弹出键盘或者隐藏键盘
查看>>
viewpager的setOffscreenPageLimit方法有什么作用
查看>>
基类去掉标题栏
查看>>
使用DatagramSocket发送、接收数据(Socket之UDP套接字)
查看>>
android用视频当做背景
查看>>
android 用action拦截打电话界面
查看>>
Android设置某个窗口常亮和最大亮度
查看>>
【已解决】Android Studio下,gradle project sync failed 错误
查看>>
打包命名
查看>>