c++之引用3

引用作为函数的参数
返回值是形参作为引用
当返回值是非基础数据类型时,先抛砖。。。
栈区、堆区、代码区、全局区(常量、静态…)
int &a 与指针引用 int * &a
class &a class * &a
常量引用
用变量初始化常量
用字面量初始化常量
const Type& name = var;
const引用让变量拥有只读属性
const引用让变量(所指内存空间)拥有只读属性,不能通过name去修改var
const int &y = x; //常引用 是 让变量 拥有只读属性 不能通过y去修改x了
const int a = 40; //c++编译器把a放在符号表中
int &m =49;err 49没有内存地址,引用只是取别名
const int & e == const int * const e
常引用让实参变量拥有只读属性
inline内联函数
c++中使用inline关键字来声明内联函数
必须将inline int myfunc(int a, int b)和函数体的实现写在一块
c++编译器可以将一个函数进行内联编译,被c++编译器内联编译的函数叫做内联函数
内联函数在最终生成的代码中是没有定义的,C++编译器直接将函数体插入在函数调用的地方
内联函数没有普通函数调用时的额外开销(压栈,跳转,返回)
内联函数是一种特殊的函数,具有普通函数的特征(参数检查,返回类型等)
内联函数是对编译器的一种请求,因此编译器可能拒绝这种请求
内联函数由编译器处理,直接将编译后的函数体插入调用的地方
宏代码片段 由预处理器处理, 进行简单的文本替换,没有任何编译过程
现代C++编译器能够进行编译优化,因此一些函数即使没有inline声明,也可能被编译器内联编译
内联编译的限制:
不能对函数进行取址操作,函数内联声明必须在调用语句之前
内联函数相对于普通函数的优势只是省去了函数调用时压栈,跳转和返回的开销
内联函数与带参数宏定义最大区别是内联函数具有普通函数的特征,而带参数是宏展开。
默认参数
函数占位参数
占位参数只有参数类型声明,而没有参数名声明
一般情况下,在函数体内部无法使用占位参数,但是既然占位必须写全
默认参数和占位参数
占位参数和默认参数在一起都能调用起来int =0
函数重载overroad
函数重载的判断标准
函数重载至少满足下面的一个条件:
参数个数不同
参数类型不同
参数顺序不同
函数返回值不能作为函数重载的判断标准
函数重载和函数默认参数在一起也会产生二义性
函数指针与函数
函数指针的基础语法,声明一个函数类型
typedef void (myTypeFunc) (int a, int b)
定义一个函数指针,这个指针指向函数的入口地址
myTypeFunc *myfuncp = NULL;
声明一个函数指针类型
typedef void (*myPTypeFunc) (int a, int b)//声明一个指针的数据类型
myPTypeFunc fp = NULL;//通过函数指针类型定义一个函数指针
定义一个函数指针变量
void (*myVarPFunc)(int a , int b)
myVarPFunc = myfunc;
myVarPFunc(1,2);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值