C语言和C++的区别

如题所述

c语言虽然经常与c++一起提及,但它们并非同一概念。c语言的标准为c89,而c++的标准为c++99。c89标准在1989年制定,最新标准为c11和c++11。不同版本的标准,功能也有所区别,但较新标准支持的编译器较少。本文讨论时,c语言标准为c89,c++标准为c++99。接下来,我们探讨c语言与c++的差异。

1. 函数默认值

在c++中,定义或声明函数时,可在形参中给它赋一个初始值作为默认参数值,如:int FUN(int a = 10);,表示未传参调用时,自动给a赋值10。然而,在c89标准下,这种操作不可行,会引发错误。在c语言中,系统在调用函数时开辟函数栈帧,传入实参时通过mov指令将值传入寄存器,再通过push指令压入栈中。若函数参数有默认值,实现时只需一步push默认值即可,提高效率。需要注意的是,赋默认值需从参数列表的右端开始赋值,从左端开始赋值会导致错误。函数多次声明是允许的,遵循从右向左赋值规则即可。

2. inline内联函数

内联函数是c++标准下的特性,与宏相似,会在调用处直接展开代码,但宏在预编译阶段展开,而内联函数在编译阶段处理。内联函数不会生成符号,没有栈帧开辟回退过程,通常将其写在头文件中,通过include后可使用。内联函数的使用需谨慎,适用于函数体非常小(1~5行代码)的情况,以提高效率。递归函数不能声明为内联函数,inline仅是对编译器的建议,最终是否生效不确定。在debug版本下,inline不起作用,仅在release版本下生效。

3. 函数重载

c语言中产生函数符号的规则是根据名称产生,不支持函数重载。c++根据函数名、参数个数、参数类型判断重载,属于静态多态。使用重载时需注意作用域问题,编译器优先在局部作用域搜索函数。

4. const

c语言中的const称为常变量或只读变量,不能作为数组下标。而在c++中,const修饰的变量可以当作数组下标使用,成为真正的常量。c++对const的扩展允许const用于数组的下标。

5. 引用

引用本质上与指针相同,但在编译器中特性不同。引用在直接使用时会解引用。引用可以配合const引用立即数。通过了解引用的本质,可掌握其使用技巧。

6. malloc, free && new, delete

这两个函数组负责内存的动态分配与释放。malloc和free是标准库函数,new和delete是运算符、关键字。new和delete调用底层的malloc和free。它们的区别包括函数调用方式、安全性、内存申请与释放顺序等。

7. 作用域

c语言的作用域仅限于局部和全局。c++引入了局部作用域、类作用域和名字空间作用域。使用名字空间定义新作用域,通过using语句访问其中的符号。
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜