【C++】C/C++的区别

本文详细介绍了C++中的引用特性,包括其与指针的区别、使用规则及常引用的概念。接着讨论了内联函数的工作原理、与普通函数及静态函数的对比,并指出其潜在的缺点。此外,文章还阐述了C++的函数重载机制及其关键要素。最后,探讨了new和delete在内存管理中的应用,分析了malloc与new的区别以及释放内存后空悬指针的问题。
摘要由CSDN通过智能技术生成

1.输入输出

C++标准库 std

#include <iostream>
using namespace std;
int main()
{
	int a = 0;
	char ch = 'w';
	cin >> a >> ch;
	cout << "a = " << a <<     << "ch = " << ch << endl;
	return 0;
}

2.引用

1.引用的处理流程
引用在底层是一个指针,使用到引用变量的地方系统自带解引用的过程。

2.引用和指针的区别
1)引用是一个别名,底层以指针的形式来做语法支持
2)使用指针需要断言 ,引用不需要(因为没有空引用),更安全

3.特点:
1)没有空引用,定义时必须初始化
2)引用不能引用取地址的数据 (eg:eax寄存器(因为没有地址)、立即数(数字)int &b=10;(因为取不了地址)
3)没有引用的引用

4.const和引用的结合

const int& b=10; 常引用
常引用能引用不能取地址的数据,把不能取地址的数据放到一个临时量中,常引用引用临时量。

3.inline函数(内联函数)

编译阶段 调用点 直接代码展开

内联函数只在本文件可见
1.inline 函数和宏的区别?
inline函数 安全 编译阶段 有类型检查和安全检查
宏 不安全 预编译阶段 直接文本替换

2.inline函数和static修饰的函数有什么区别?
inline函数 直接代码展开 没有开栈和清栈的开销
static修饰的函数 有开栈和清栈的开销

3.inline函数的缺陷
1)以代码碰撞为代价,使目标文件变得十分庞大
2)以空间换时间的概念

4.inline函数的限制
1)只在Release版本生效,Debug版本不生效,还会入栈
2)inline函数只是给编译器的一个建议【递归 for/while switch 一定不使用inline】
3)inline是基于实现的,不是基于声明的 声明没法展开
4)inline 函数一般写在.h头文件中

4.函数重载

1.

C:同名函数不能共存,因为函数符号生成规则只和函数名称有关
C++:同名函数能共存,因为函数符号生成规则与函数原型有关

函数组成:
返回值 函数名称(形参列表) <==函数原型
{
函数体
}

名称粉碎:C++是支持函数重载,对于多个函数来说,其函数的名称是一样的,为了加以区分,在编译链接时,C++会按照自己的规则篡改函数的名称。这一过程成为“名称粉碎”。不同的编辑器会采用不同的编辑器进行改编。

2.函数重载与什么有关?
只与形参列表有关 1)形参类型不同 2)形参个数不同 3)新参顺序不同

3.函数重载三要素
1)同名 2)不同参 3)同作用域

5.new/delete

1.malloc开辟空间是函数,需要引用<stdlib.h>头文件
new是关键字
2.malloc只是开辟空间
new 能开辟空间和给开的空间初始化
3.malloc申请空间失败的时候,返回空指针
new申请空间失败 throw bad-alloc(坏的内存分配)
4.malloc堆上
new自由存储区
5.malloc 需要计算类型的大小
new不需要 类型的大小是自动进行计算的

空悬指针

int main()
{
	int *p=new int(10);
	*p=100;
	delete p;
	cout<<*p<<endl;
	*p=10;
	cout<<*p<<endl;
	return 0;
}

delete p只是把空间归还给系统,但指针仍然指向堆空间,仍可以修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值