内联函数 除去函数调用,C++内联函数提供了另一种选择,内联函数的编译代码和其他的程序代码“内联”起来。x编译器将使用相应的函数代码替换函数调用。
如何使用内联函数 必须在函数声明前或函数定义前加上关键字inline.
如下面的代码:
#include <iostream>
#include<cmath>
using mamespace std;
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);
#define square(int x) (x)*(x)
d=square(c++);
内联函数可以按值传递,宏不行,基本上宏在c++中不使用了。
使用内联函数的注意事项
- 不能递归
- 只有当函数只有 10 行甚至更少时才将其定义为内联函数.
- 当函数体比较小的时候, 内联该函数可以令目标代码更加高效. 对于存取函数以及其它函数体比较短, 性能关键的函数, 鼓励使用内联
- 滥用内联将导致程序变慢. 内联可能使目标代码量或增或减, 这取决于内联函数的大小. 内联非常短小的存取函数通常会减少代码大小, 但内联一个相当大的函数将戏剧性的增加代码大小. 现代处理器由于更好的利用了指令缓存, 小巧的代码往往执行更快。
内联函数与类,结构体 写不来,以后更,反正有关系。
引用变量 我们说的引用变量,实际上是给另一个变量取一个别名。例如,我们已经有了一个叫做 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)
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日晚。。。 有些上面没写,请参考以下文章: 内联函数 引用变量
|