C和C++常见比较和关键字

本文对比了C和C++中的const与#define的区别,探讨指针与引用的使用,分析了malloc、calloc、realloc的内存管理,并详细解释了static关键字在不同情况下的作用,包括局部变量、全局变量、函数和类成员的使用场景,同时提及了返回值、全局变量和异常处理的相关概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

const与#define

const#define
在编译运行阶段使用在预处理阶段展开
有数据类型无数据类型
编译器会进行类型安全检查只进行字符替换,并可能产生错误
可以进行调试(有集成化的调试工具)不能调试
在内存中分配仅仅是展开
可以创建class专属常量。提供封装性无法创建class专属常量,一旦宏被定义,就在其后得编译过程中有效(除非被#undef。即不能提供封装性)

指针与引用

指针引用
是一个存储着地址的变量指向对象的一个别名
可以在任何时候被初始化创建时必须被初始化
可以为NULL不能有NULL引用
可以随时改变所指的对象不能改变引用的关系
需要分配内存空间不需要分配内存空间

malloc/free与new/delete

malloc/freenew/delete
标准库函数运算符
malloc申请空间不会初始化new申请空间会初始化
malloc返回值为void*类型new返回值为空间的类型
malloc申请失败后返回NULLnew申请失败会捕获异常
申请自定义对象不会调用构造和析构函数会调用构造和析构函数
效率高效率略低(底层封装了malloc/free)

malloc、calloc、realloc

  • malloc:申请的内存位于堆中,没有初始化其中的内容
  • 原来没有使用过的话每一位都可能是0,否则可以是任意的数据。
  • 返回值是void*类型(可以强制转换为任意类型)。
  • calloc:申请到内存即将其初始化为0.。
  • 字符型或整形会初始化为0,指针类型的初始化为空指针
  • realloc:对申请到的空间进行调整(数据可能移动)。
  • 当扩大空间时,会尝试从现存的数据后追加字节;不满足的话会重新开辟内存块,将现有的数据拷贝至新内存处。

static关键字:

  • 修饰局部变量
  • 在程序运行时初始化并默认初始化为0
  • 存储在静态区,具有全局属性
  • 修饰全局函数和全局变量
  • 只能在此源文件中使用
  • 修饰类的成员变量
  • 不依赖类对象的存在而存在
  • 必须在类外进行初始化(否则会链接错误)
  • 修饰类的成员函数
  • 无this指针
  • 只能访问自身类的静态函数和静态变量
  • 总的来说就三个作用:
  1. 隐藏
  2. 保持持久性
  3. 默认初始化为0

返回值、全局变量、异常

优点缺点
返回值和系统API一致不能方便的使用计算结果
全局变量能方便地使用计算结果可能会忘记检查全局变量
异常可以为不同的出错原因定义不同异常类型,逻辑清晰有些语言不支持异常,抛异常对性能有负面影响
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值