C++ 函数深入(内联函数,引用变量)

内联函数
除去函数调用,C++内联函数提供了另一种选择,内联函数的编译代码和其他的程序代码“内联”起来。x编译器将使用相应的函数代码替换函数调用。

如何使用内联函数
必须在函数声明前或函数定义前加上关键字inline.

如下面的代码:

#include <iostream>
#include<cmath>
using mamespace std;

//定义内联函数distance
inlline double distance(double a,double b){
	return sqrt(a*a+b*b);
}

int main(){
	double k=6,m=9;
	cout << distance(k,m)<<endl; //内联函数,它与下面的语句等价!

   cout<<sqrt(k*k+m*m)<<endl;//编译后的样子
}

内联与宏的区别

#define square(int x) x*x//宏定义是先替换再计算
//例如:
b=square(4.5+7.5);//b=4.5+7.5*4.5+7.5;
//可以通过加括号来改进
#define square(int x) (x)*(x)


//即使加了括号,宏也不能按值传递
d=square(c++);//d=(c++)*(c++);
//c还是会递增两次

内联函数可以按值传递,宏不行,基本上宏在c++中不使用了。

使用内联函数的注意事项

  1. 不能递归
  2. 只有当函数只有 10 行甚至更少时才将其定义为内联函数.
  3. 当函数体比较小的时候, 内联该函数可以令目标代码更加高效. 对于存取函数以及其它函数体比较短, 性能关键的函数, 鼓励使用内联
  4. 滥用内联将导致程序变慢. 内联可能使目标代码量或增或减, 这取决于内联函数的大小. 内联非常短小的存取函数通常会减少代码大小, 但内联一个相当大的函数将戏剧性的增加代码大小. 现代处理器由于更好的利用了指令缓存, 小巧的代码往往执行更快。

内联函数与类,结构体
写不来,以后更,反正有关系。

引用变量
我们说的引用变量,实际上是给另一个变量取一个别名。例如,我们已经有了一个叫做 a ,将一个新的变量 b ,作为变量 a 的引用,相当于给 a 取了一个别名叫做 b 。

int rats;
int & rodents=rats;

在这里 & 不是取地址操作符,而是类型标识符的一部分。正如 char* , * 也是类型标识符的一部分,表示一个指向 char 类型的指针变量,而我们的 int& 表示一个指向 int 类型的引用变量。
这里的 rats和 rodents指向相同的值和内存单元。

引用变量和指针的区别
引用变量必须声明变量时进行初始化,指针可以先声明,赋值

int rats=101;
int & rodents=rats;
int * prats=&rats;

代码中rodents和*prats都可以同rats互换,&rodents和prats都可以同&rats互换。

注意:1.当引用变量在创建时进行初始化,引用更接近于const指针,一旦与某个变量关联起来,就会一起效忠于他。
2.即引用变量只能作为一个变量的引用,正如上面的 b ,当他成为 a 的引用之后,在他的生命周期里,就不能成为其他变量的引用

引用变量用作函数参数

int times;
grump(times);
void grump(int &x)//让x成为times变量的别名

//重点
void swap(int &a,int &b);
void swap(int *p,int *q);
void swap(int a,int b);
//一一对应
swap(wallet1,wallet2);
swap(&wallet1,&wallet2);
swap(wallet1,wallet2);//这个没用

第三种方法没有用,通过代码,可以很容易看出如何用作函数参数的,第二种是指针的地址传递,第一种是传递引用,运用原始数据。

引用的属性和特别之处
看primer上的知识点,我到这里看不懂了,涉及临时变量,引用参数和const。以后更新。。。。
8月29日晚。。。
有些上面没写,请参考以下文章:
内联函数
引用变量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值