C和C++区别
1、变量存储位置
- 初始化且初始化不为0的 static 和 全局变量存储在data段
- 未初始化或者初始化为0的static 和全局变量存储在bss段
- 局部变量在栈上
- new或者malloc申请的内存在堆上
2、struct和class的区别
- C语言中struct不可以为空,c++可以且大小为1
- C语言中struct仅仅是结构体,不可以包涵成员方法,c++中struct和class类似
- c++中class内的成员默认为private,struc中成员默认为public
- struct不可用来做模板
- struct可以使用{}聚合类型方式赋值,class不可以
3、c++和C相互调用
- c++调用C语言使用extern ”C” 修饰函数声明
- C语言调用c++,如果可以改动源码,可以在c++源码中加上extern ”C”,让c++代码使用C语言编译规则
- 如果不可以改动源码,需要使用一个中间的c++函数封装,并且使用extern ”C”,让他按照C语言规则编译
4、new和delete
- new 申请内存 调用构造函数
- delete 调用析构函数 释放内存
5、const
- C语言中的const量是常变量(不可作为左值),c++中是常量(不可修改)
- c++中的常量必须初始化
- 常量在编译期自动替换为常量的值,所以常量不产生符号,仅本文件可见。常变量在使用的时候依然依赖地址寻址确认值,数据常变量已然产生local符号,仅本文件可见
6、引用(指针和引用的区别)
- 引用相当于被引用量的别名,指代同一个量
- 引用底层使用指针实现,虽然无法查看,但是底层也占用4字节空间
- 引用底层是* const 的指针,必须初始化,而且一旦初始化,后期无法改变引用的指向
- 引用在调用处自动使用指针的截引用进行替换,所以永远无法访问到引用自己的真实内存,所以引用一声=生只能引用一个量
7、inline
- inline关键字修饰的函数为内联函数,是对系统的建议,并不绝对保证其处理为内联
- 内联函数编译期在函数调用点展开
- 内联函数不产生符号,仅本文件可见
- 递归,循环等函数结构不可能被处理为内联