c和c++的区别

 

函数参数可以赋默认值(C++)

  • 在函数声明或者定义的地方,给参数赋默认值;在同一作用域下(或者说同一文件内,因为在程序只会依据本文件中的默认值生成指令,而不会管另外的文件传的默认值),函数参数赋默认值的顺序为从右至左,不可重复赋值。
  • 在函数调用的时候,可不必穿参数,会默认传默认值;

宏函数和inline(内联)函数(C++

  • 宏函数的特点:不存在栈帧的开辟;不存在参数的带入;不存在返回值的带出;不存在参数清除;不产生符号;特别大的死肋是不存在类型检查,不可以调试;在预编译期在调用点展开;
  • Inline函数的特点:内联函数的形式是在普通函数前加inline关键字;内联函数会在编译期在调用点展开;在debug版本中可以调试,也会进行函数栈帧开辟等操作,产生一个local符号;在realse版本中不产生local符号,也不会进行栈帧开辟等操作,会在调用点展开。
  • 注:内联函数不一定会展开,如果编译器不清楚函数的调用次数,内联函数就不会展开,就相当于普通函数。

 

函数重载(C++

  • C语言生成的符号是依靠函数名;而c++生成的符号是依靠(函数名+参数列表)
  • C++函数重载:在同一作用域下,函数名相同,参数列表不相同。切记:返回值不参与重载,重载函数调用类型要明确;
  • 注:当有多个函数重载的时候,可能会存在类型转换,与多个重载函数匹配;

 

const(c++的使用)

  • c++中const定义的是常量,是一个不允许修改的值,在编译期的时候将使用该常量值的地方替换成常量的值;而在c中const定义的是一个常变量,可以通过一定的方式来修改它;

 

  • C++中的const是常量必须初始化,而c中const是常变量,可以先不初始化;

 

C++中const产生的符号是local,因为编译期是针对单个文件的,哪怕const生成一个全局变量,根本访问不到;

  • c++常量可以退化成常变量(编译期无法确定其值的时候会退化);

在上述图中,要对c的地址访问取值时,要在运行期才进行,所以d退化成常变量。

  • const修饰

const修饰的类型是离它最近的完整类型;

const修饰的内容是它修饰类型的内容;

const修饰的内容不允许被改变;

不允许泄漏常量的地址给非常量的指针;

 

引用(C++

  • 引用必须初始化
  • 是一个对象,是对其底层是个指针的封装,在使用时替换指针的解引用;
  • 不允许泄漏常量的引用给一个非常量的引用

  • 引用一个临时量,如下:

 

总结:标准类型产生的临时量是常量;自定义类型产生的临时量是非常量;引用单独使用不参与类型;const单独使用不参与类型;const和引用结合使用参与类型;const修饰指针,如果修饰的内容里没有*,则const不参与类型

 

动态内存的申请

  • C语言申请内存和释放内存用的是malloc和free,c++用的是new和delete;

 

命名空间,需要时就使用

 

自定义类型

  • C语言自定义类型中,只允许存放成员变量;而c++自定义类型在存在成员变量和成员方法;c++中成员方法不占内存,因此c++自定义类型可以为空结构体,size为1,作为有效的标志;而c不能定义空的结构体,是不被允许的;

 

根本区别

  • C++是面向对象:对象+对象+……+消息(半面向对象)
  • C是面向过程:函数+数据

c语言代码与c++代码如何互相调用

  • c++调用c语言代码:

  • c语言调用c++代码:在cpp文件中将c语言要调用的代码,用c语言的规则编译即可

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值