C和C++的区别(全)

重载
函数符号的生成规则
C    只和函数名有关系
C++  函数原型有关:
    1.函数名
    2.参数类型
    3.参数顺序:参数个数,参数类型,参数顺序
重载3要素:1.同名 2.参数不同 3.同作用域

详细可见https://blog.csdn.net/choudan8888/article/details/83751418

new/malloc 的区别
    1.new 是一个关键字,malloc是一个函数
    2.new在自由存储区域开辟内存 malloc堆上开辟内存
    3.new开辟内存并且初始化 operator new      malloc单纯开辟内存无初始化
    4.new的operator new可以重载 malloc不能重载
    5.new可以调用malloc但是malloc不能调用new(new里面可以进行重载,重载时可以调用malloc)
    6.内存开辟失败  new会抛出异常  malloc返回NULL
    7.new可以开辟常量,但是malloc不能

new
int a;
char *pc = new(&a)char('a');  //重定义new  在a的内存上分配一个字节给pc(自由存储区)

malloc  原型void *malloc(size_t size)
int *p = malloc(1)  

error  malloc返回一个无符号的指针类型,其他类型可以转化成void *,但是void *转化成其他类型需要强转, int *是要四个字节,这里只开辟一个
free 原型 void (void *ptr)

详细可见https://blog.csdn.net/choudan8888/article/details/83991936


const
C语言中是常变量
    编译阶段   常变量有没有做左值,其他的处理和变量是一样的
    C中const修饰的全局变量 global
C++中是常量
    在编译阶段把常量使用的地方替换成常量初始化的值
    C++中const修饰的全局变量 local  extern
    1.常量一定要初始化
    2.不允许做左值
    3.不允许间接访问来修改常量的值,杜绝间接访问的风险
    
    在fun函数的普通变量在栈中存储,栈帧回退之后这些变量的值都会被清空,静态变量的存储在.data段,栈帧回退的时候不会被清退,所以这个变量的生存周期会超脱这个函数的生命周期,但是无法访问这个静态变量,除非将这个值返回出来

详细可见


https://blog.csdn.net/choudan8888/article/details/83821546

引用 & 引用就是别名  引用的底层是以指针做支持
    1.引用一定要初始化
    2.引用不能引用引用取地址的数据
    3.引用不能改变,会产生歧义
    4.引用变量只能使用引用变量所引用的变量的数值

详细可见https://blog.csdn.net/choudan8888/article/details/83868127
内联inline  编译阶段在代码的调用点直接代码展开
    1.inline和static函数的区别
         1.内联函数没有栈帧的开销,static有栈帧的开销
         2.inline在调用掉直接展开 static 函数符号展开
inline和宏的区别
    1.inline在编译阶段处理 宏在预编译阶段处理
    2.inline有类型接查和安全检查 宏无类型检查和安全检查
inline注意事项
        1.实现在.h文件
        2.inline函数只在relise版本生效
        3.只是给编译器一个建议
        4.递归,循环,switch分支,不能用内联
        5.内联是基于实现,不基于声明
inline缺点:以代码膨胀为代价   空间换时间
建议
    1.开栈的开销 > 执行的开销   建议设为inline
    2.开栈的开销 < 执行的开销   不建议设为inline

详细可见https://blog.csdn.net/choudan8888/article/details/83751418
    
函数默认值
    1.从右向左依次赋值,入栈时最左边的值在最上面,实参匹配是从左向右,刚好就是第一个参数
    2.默认值不能重复赋值,会对编译器产生二义性
    3.默认值一般写在声明上

详细可见https://blog.csdn.net/choudan8888/article/details/83751418
C和C++的相互调用
    extern“C”
    1.C++调用C   C++源文件extern“C”
    2.C调用C++   C++源文件可以修改 extern"C"
                 C++源文件不可修改 加重间层.cpp
    3.不明确编译器   #ifdef_cplusplus
namespace
    using namespace std; using 指示符
    using std::cout; using 声明
    namespace 同名合并
structh和class的区别
    在C语言中空结构体的大小是0,C++中空结构体的大小是1
    C语言中struct默认权限是public C++中class默认权限是private

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值