c++面经基础知识汇总(类型转换、new/delete/malloc/free、什么是RTTI)
发布日期:2021-05-07 17:59:54 浏览次数:11 分类:原创文章

本文共 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 是将基类的指针或引用安全的转换为转换为其派生类的指针或引用

上一篇:c++面经知识汇总(虚函数怎样实现多态、函数调用、处理函数返回值、malloc和new的区别)
下一篇:c++面经知识汇总(虚函数、析构函数、fork)

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年03月28日 19时10分24秒