C语言和C++的区别

1.函数的默认参数

C++允许给参数赋默认值,C语言不允许
函数调用的时候会有压栈开销,参数一般是从右向左压参

int  sub(int a = 10,  int b)			//错误
int sub(int a, int b = 10);			//正确

注意:

int sub(int a, int b = 10);	
int  sub(int a = 10,  int b)		

这种声明很熟的情况也是可以的
C++允许有缺省参数,但是必须是从右往左,依次填写,不能跳跃

2.inline

在C++ 中inline代替了宏,但是宏是在预编译阶段进行展开的,inline函数是在编译阶段进行展开的,宏没有类型安全检查,内联函数有类型安全检查。
inline函数和普通函数的区别:inline函数的声明和实现放在一起,一般放在头文件中,在编译的时候回在调用的地方展开,不存在重定义,不会生成符号表。
inline函数一般具有的特点是:

  • 函数体小
  • 递归函数不能是inline函数
  • inline函数只是一个建议
  • 在debug版本下不起作用,release版本下起作用
  • 不会生成符号表,没有调用函数栈帧的开销

3.函数重载

这主要是与命名修饰规则有关,C语言只考虑函数名,C++考虑函数名,参数类型。参数个数。

  • 静多态:函数的重载、模板
  • 动多态:继承中的多态(虚函数)
#include <iostreaaam>
using namespace std;

int sum(int a, int b)
{
	return a +b;
}

double sum(double a, double b)
{
	return a + b;
}

int main()
{
	//sum(int a, int b);
	sum(1, 2);
	sum(1.0, 2.0);
	return 0;
}

两个sum构成了重载,可以通过编译,分别调用了两个sum函数,但是当在main函数里面生命了第一个函数的时候,会说double类型转化成int类型会损失精度,可以搜索的时候现在局部作用域中先搜索。
函数的重载实现是依赖于命名修饰规则,必须是在同一作用域下的才是重载

4.const

C语言中被const修饰的变量,具有常属性,但是不是常量,不能单做左值引用,可以不初始化,但是最后就不能在初始化,不能当做数组的下标,可以通过指针修改。
C++中被const修改的变量,就是一个常量,必须初始化,可以通过指针修改。
C语言中是只读常量,C++中是真正的常量

5.引用

引用没有创建新的变量,只是给变量起了一个别名,可以操作变量,
引用和指针在底层的实现是一模一样的。

6.内存管理

C语言申请内存和释放内存用的是malloc、free
C++ 用的是new、delete
operator new封装了malloc 抛异常
new封装了operator new 调用构造函数

malloc->operator new -> new

抛异常调用构造和析构函数

7.命名空间

C语言作用域有全局作用域、局部作用域
C++有全局作用于、局部作用域、命名空间(namespace)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值