C与C++的不同点

C与C++的不同点

首先声明一下我这里的不同点不是那些C有C++没有或者C++有而C没有的,而是一些都有的内容的不同的存在意义
1.内存管理
new/delete 是C++中具备申请释放内存功能的运算符,功能相当于C中的malloc和free。
new类型:会自动计算类型所需要字节数,然后从堆分配对应字节数的内存,并返回内存的首地址(具备类型)。
delete类型:delete 指针:会自动释放堆内存
注意:new/delete 和malloc/free不能混用,因为在new和delete会自动调用类、结构的构造函数和析构函数,但其实new和delete的底层还是调用了malloc和free。
下面用一张表格来总结一下:
特征new/deletemalloc/free
本质运算符标准库函数
参数类型字节数
构成调用自动调用不调用
分配内存大小自动计算手动计算
返回值完成类型指针void*类型指针
分配内存失败抛出异常NULL
2.static关键字
C语言中static 关键字
  • 修饰函数名时,称为静态函数,只允许该文件在源文件中调用,不能被其他文件所调用
  • 修饰局部变量时,称为静态局部变量,该变量只能在局部函数内,但出了作用域也不会释放。
  • 修饰全局变量时,称为静态全局变量,该变量只能在该文件中调用,出了该文件不能被调用
简单的来说static的作用在C语言中可以分为隐藏和增加变量的内容的持久性
C++中static关键字
保留了C文件的功能,增加了一些C++的独有功能,可以修饰类的成员变量和成员函数,形成静态成员和静态成员函数。
3.const关键字
首先C/C++中const都是一种修饰符,表示具有只读属性,一旦我们尝试去修改这些被修饰的变量或者代码时,编译器就会给我们报错,因此可以用来给我进行报错。
C语言中const的使用一些规则:
  • 被const修饰的变量可以初始化,也可以不初始化
  • 被修饰的量不能被当做常量来使用,而是一种常变量,简单来说还是一种变量只是带了常属性,不能真的当做一个比如数组的长度来理解
  • 被const修饰的变量不能用于左值,就是不能被修改,因为是具有只读属性
  • 常变量的编译模式和普通变量时一样的
C++语言中const的一些使用:
  • 被const修饰的一定要初始化
  • 被const修饰的变量可以被当做常量使用
  • 被const修的变量也可以变为常变量
  • 编译模式,若在编译时立即给出立即数,则变为常量,否则则是常变量
代码例子:
const int a= 20;//常量
//----------------------
int b = 20;
const int a= b;//常变量
  • 由于C++对于类型的检查会很严格所以在函数的传参时,若直接以字面值传输在函数的参数表要加const,因为字面值具有常属性
  • 在类中可以作为常函数,const是给this指针加的,在常函数内不能修改成员变量的值,普通的成员函数可以调用常函数,而常函数只能调用常函数,如果真的需要在常函数中修改某个成员变量的值,则需要在该成员变量前加mutable修饰符
class A
{
public:
	void show(void) const
	{
	
	}
}
  • 常引用,在无名引用时必须使用无名引用或者在引用临时变量
const int& b = 20;
const int& c = 10+20;
4.void*
C语言中 void* 可以与任意类型进行转换
而C++中必须进行强制类型转换才能给其他类型进行赋值,而其他类型可以给void*类型进行自动赋值
因为C++可以自动获取类型所以对于万能指针的需求不是很大。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值