c++第八章__内联函数__引用变量

目录:

内联函数

/*
01)c语言中的宏,例如:
  #define SQUARE(X) X*X

  a = SQUARE(5.0); //等价于a = 5.0*5.0 正常
  b = SQUARE(4.5+7.5) //等价于b = 4.5+7.5*4.5+7.5,则不

       正常了,可以通过#define SQUARE(X) ((X)*(X))方法改进 

  d = SQUARE(c++) //等价于d = c++ * c++ c最后的值会增加两次 假如c等于3 c++ * c++就等价于3*4 最后c等于5,

      而在宏定义出现类似的错误的时候,可以考虑使用内联函数                                                            

02)要是有内联函数,要采取下述措施之一:
  在函数生命前加上关键字inline
  在函数定义前加上关键字inline
  通常的做法是省略原型(函数声明),将整个定义放在本应
提供原型(函数声明)的地方                                                                                                                   

03)内敛函数可以提高程序的执行速度,代价是 程序占用的

     内存增加,假如程序要在10个不同的地方调用同一个内联 函数,则该程序将包含该函数代码的十个副本                  

04)以下代码中也包含了c++后缀的使用技巧,需要注意的一个点
*/

附图说明普通函数调用和内联函数调用的区别

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 //内联函数的定义
 6 inline double square(double x) { return x * x; }  //将整个函数定义放在了一行,如果函数定义占用多行,那么使用内联函数就不太合适
 7 
 8 int main()
 9 {
10     double a, b;
11     double c = 13.0;
12 
13     a = square(5.0);  //内联函数的调用
14     b= square(4.5+7.5);  //内联函数的调用
15     cout << "a =  " << a << endl;
16     cout << "a =  " << b << endl;
17 
18     cout << "c = " << c;
19     double d = square(c++);  //后缀运算符是先使用后修改,所以c先将13传入内联函数,后将自身值递增为14
20     cout << "  c square = " << d << endl;
21 
22     cout << "Now c = " << c << endl;
23 
24     system("pause");
25     return 0;
26 }
内联函数的定义和调用

执行结果:

引用变量(锚点为m2)

/*
01)c和c++使用&来指示变量的地址。c++赋予了&另一个含义,将其用来声明印用
  int rats;
  int & rodents = rats; //将rodents作为rats的别名 int &表示是指向int的引用,其中&不是地址运算符
  上述声明允许将rats和rodents呼唤,他们指向相同的内存单元,将rodets加1将会影响两个变量
  更准确的说rodents++操作将一个有两个名称的变量加1
02)必须在声明引用时将其初始化 如:
  int rats;
  int & rodents;
  rodents = rats; //这样做是错误的
03)引用和指针是有区别的
  int rets;
  int* parts = &rats; //声明并初始化一个指针parts,该指针指向rats
  int & rodents = rats; //声明并初始化一个引用rodents,使rodents成为rats的别名
  这样表达式rodents和*parts都可以和rats呼唤,而表达式&rodents和parts也都可以和&rats互换
04)引用更接近于const指针,必须在创建时进行初始化,一旦与某个变量关联起来,就一直效忠于它
  也就是说:int & rodents = rats;
  实际上是该代码的伪装表示:int* const pr = &rats;
  其中引用扮演的角色与表达式*pr相同
05)int rats = 101;
  int* pt = &rats; //声明并初始化一个指针parts,该指针指向rats
  int & rodents = *pt; //由于*pt就等价于rats,所以该句的意思就是声明并初始化一个引用rodents,使rodents成为rats的别名
  int business = 50;
  pt = &business; //pt改为指向business,但是rodents还是指向rats
*/

 1 #include <iostream>
 2 
 3 using namespace std;  
 4 
 5 int main()
 6 {
 7     int rats = 101;
 8     int & rodents = rats;  //声明并初始化一个引用rodents,使rodents成为rats的别名
 9 
10     cout << "value of rats is: " << rats << "; " << "Address of rats is: " << &rats << endl;
11     cout << "value of rodents is: " << rodents << "; " << "Address of rodents is: " << &rodents << endl;
12 
13     int business = 50;
14     rodents = business;  //等价于rats = business,执行完此句之后,rats和rodents的值都会改变为50,且二者的地址相同,但二者的地址和business是不一样的
15     cout << "value of business is: " << business << "; " << "Address of business is: " << &business << endl;
16     cout << "value of rats is: " << rats << "; " << "Address of rats is: " << &rats << endl;
17     cout << "value of rodents is: " << rodents << "; " << "Address of rodents is: " << &rodents << endl;
18 
19     system("pause");
20     return 0;
21 }
引用变量的声明和初始化

执行结果为:

猜你喜欢

转载自www.cnblogs.com/YiYA-blog/p/10546023.html
今日推荐