C/C++的区别

1、new和malloc区别:

1、new是关键字,malloc是函数
2、new返回值类型安全,malloc返回值类型不安全
3、new不需要计算开辟内存大小,malloc需要
4、new开辟失败会抛出异常,malloc开辟失败会返回NULL。
5、new可以初始化
6、new开辟的内存在自由存储区域,malloc在堆上开辟。
7、new用delete释放,malloc用free释放。

为什么不能直接操作堆内存,而是用指针间接操作?
堆内存没有变量名,堆内存的所有权交给上一个有变量名的指针来管理。

2、函数重载及C++符号生成规则

函数重载三要素:1、同名 2、同作用域 3、不同参
函数重载:用同一个函数名不同的数据类类型来构造多个函数,main函数调用时通过重载决议,即根据实参的数据类型选择对应的函数。
在C中同名函数不能存在,C++中可以。

C中符号生成只与函数名称有关,C++中与除函数体外的所有(函数返回值、函数名称、形参列表)有关。
C++的符号生成:

调用约定符号
-cdecl@@YA
-stdcall@@YG
-fastcall@@YI
返回值符号
intH
charD
doubleN
floatN

如:int sum(int,int)符号:?sum@@YAHHH@Z
第一个H返回值,后两个H形参列表

3、引用和指针的区别

&相当于给变量取别名,引用一定要初始化,引用在底层就是一个指针的过程,使用到引用变量的地方系统自带解引用的过程。
区别:
1、引用相当于别名,在底层以指针的形式来做支持
2、引用不能引用不能取地址的数据,如立即数,即数字
3、引用不能改变
4、使用引用变量,只能操作饮引用变量所引用的内存单元。
常引用:能引用不能取地址的数据,把不能取地址的数据放到一个临时量中,可以引用临时量。如const int &b = 10;正确,但不能int &b = 10;

4、inline函数的特点,与宏、普通函数、static修饰的函数的区别

inline函数(内联函数):直接将函数里的代码进行替换,不会开辟函数栈空间
什么时候使用inline函数:函数体积不大时;频繁调用的函数;递归不会变成内联函数。
缺陷:以代码膨胀为代价,以空间换时间
inline函数的限制:
1、只在Release版本生效
2、inline函数只是给编译器的一个建议(递归、for、while 、which的话,编译器不会接受这些建议)。
3、inline函数是基于实现的,不是基于声明的。
4、inline函数实现写在头文件中。
inline函数与宏的区别:
1、内联在编译时展开,宏在预编译时展开;
2、编译内联函数可以嵌入到目标代码,宏只是简单的文本替换;
3、内联会类型、语法检查,宏不会;
4、宏不是函数,而内联是;
5、宏定义要小心处理宏参数(一般参数要括号起来),否则易出现二义性,而内联定义不会出现。
inline函数与普通函数:
1、普通函数调用有标准的开销,内联函数则是在编译过程中在函数的调用点直接把代码进行展开,没有函数的调用开销。
2、inline函数内联成功后,不会在符号表上生成符号。普通函数会生成符号。
3、inline函数允许在多个cpp文件中多次定义,而一个可执行的cpp源代码中一个函数只能被定义一次。这样就导致如果你把inline函数定义在一个.h文件并让两个cpp代码包含的话,就会造成这个函数分别在两个cpp文件中被定义产生错误。
普通函数与static修饰的函数:
1、普通函数整个工程可见,static只是本文件可见
2、static函数形成的符号是局部的,链接器是不可见的,而普通函数生成的符号是全局的,链接器的可见的。

C与C++的相互调用

extern “C”

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值