c c++的区别

 

本篇博客讲述c.c++的八大区别

 一、函数重载

* 在c中,函数名相同的俩个函数,没有函数重载,编译器会报错。

* 但在c++中,函数会重载,依赖函数的原型,有三个要素:

1.函数名相同                   重载的前提函数名应该相同

2.参数列表不同                函数的参数类型 ,个数,顺序不同

3.处于同一作用域          

而函数原型的函数符号生成规则:

返回值+函数名+参数列表

例如 int Add(int,int)    生成的函数符号为: ?Add@@YAHHH@Z 

二、const

在c中,const修饰的值为常变量,不能做左值,其他与正常的变量一样

在c++中,const修饰的值为常量,值不允许改变。在编译期,在常量出现的地方直接替换成了初始化的值。

c++中:

1.const修饰的值一定要初始化

2.不能有修改常量内存块的风险

3.const修饰的全局变量的符号是一个local

4.用变量初始化常量,常量会退化成常变量。

extern const修饰的全局变量的符号声明成global

三、引用 、指针

引用 自带解引用,相当于变量(内存单元)的别名,底层是用指针来实现的。引用是带类型的,不带类型是取地址符

1.引用一定要初始化,不然访问不到

2.引用引用的对象一定要能取地址(例如那个值不能是一个数值,int &a=10)

3.引用不可改变     例如 不能int&a= b;然后int & a=c;  一个名字只能用一次。

4.引用只能访问所引用的变量的内存块里内容。  例如  int c =10;int& a=c;  a自带解引用 ,使用时直接就是a的值

四、malloc、new的区别

1. malloc是一个函数,new是一个关键字

2.malloc在堆上,new是自主存储区域。

3.malloc不能调用new,new可以调用malloc。

4.malloc只开辟空间,而new还自动初始化

5.返回值不同,当失败时,malloc返回空,new抛出异常

6.malloc不能重载,new可以重载

7.malloc不能开辟常量内存,new可以

五、inline(内联函数),static 宏函数

1.内联函数在调用点展开

2.不一定都会展开,只是对编译器的建议,比如说递归,循环,switch就不会,因为函数展开是在编译期间,此时并不知道函数参数的值,所以无法获取具体展开的次数

3.优点是能提高效率,缺点是代码膨胀(在每个调用点都生成指令,会变异很多份),以空间换取时间。

4.内联函数写在头文件中,因为需要不同的.cpp文件调用,如果放在.cpp文件中,其他.cpp文件不能使用

5.当函数的栈帧开辟开销大于函数的执行开销,就使用内联函数,否则不用

6.只在release版本生效

7.基于实现,在定义点使用,不在声明中使用

8.inline函数与宏函数相比有类型检查。与static相比都在本文件中可见,但是inline没有栈帧开辟和清理的开销,static有,而且inline不产生符号,static产生符号。

六、函数的默认值(只能在同一作用域)

在c++中可,c不可

1.必须从右到左依次赋值,不能跳过

2.不能重复赋值,只能赋一次

3.一般在声明上给出默认值。

七、c c++的相互调用

c调用c++

1.c++能修改

.cpp中加入extern“c”

2.c++不能修改

添加中间层

八、名字空间作用域

using           namespace           std;

指示符          空间                     作用域名

namespace            cy1201  就是将本文件命名为cy1201

using   namespace  cy1201  就是用cy1201 下的所有内容

cy1201::a  

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值