引用类型是C++新增加的一个类型,也是非常体现C++特点的一个类型,一直知道其是别名,但具体含义必须准确掌握,才能准确的应用,其注意点如下:

1、定义:引用是已定义的变量的别名(另一个名称)

2、用途:引用变量的主要用途是用作函数的形参

3、使用注意事项:必须在声明引用时进行初始化(引用更接近const指针,必须在创建时进行初始化,一旦与某个变量关联起来,就将一直效忠于它)

这三点记住,就可以说掌握了引用的用法,哪一点不理解到位,使用过程中都报错。

比如第一点,定义,引用是已定义的变量的别名,其含义就是首先存在一个变量,这是前提条件,否则的话,编译就会报错,用一个例子展示一下:

  1 #include <iostream>
  2 #include <stdio.h>
  3 
  4 int getMax(int &a, int &b)
  5 { 
  6   int max;
  7   if(a > b) 
  8       max = a;
  9   else
 10       max = b;
 11   return max;
 12 }
 13 
 14 int main()
 15 { 
 16   using namespace std;
 17   int a1 = 2;
 18   int b1 = 3;
 19   int max = getMax(2, 3); 
 20   printf("max = %d\r\n", max);
 21   int max = getMax(a1, b1);
 22   printf("max = %d\r\n", max);
 23   return 0;
 24 }

是不是,看着上面的代码挺正常的,我一开始也是感觉这样的,直接隐形转化不就可以了,实际不是这样的,如果你这样想,编译就开始打你耳光了。

编译情况如下:

root@mkx:~/learn/quote# g++ quote.cpp -o quote
quote.cpp: In function ‘int main()’:
quote.cpp:19:24: error: invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’
   int max = getMax(2, 3); 
                        ^
quote.cpp:4:5: note:   initializing argument 1 of ‘int getMax(int&, int&)’
 int getMax(int &a, int &b)
     ^
root@mkx:~/learn/quote# 

报错提示了不能把rvale int直接给int&,其意思可以理解为,变量都不存在,何来引用呢?
代码改成这样就可以了:

1 #include <iostream>
  2 #include <stdio.h>
  3 
  4 int getMax(int &a, int &b)
  5 { 
  6   int max;
  7   if(a > b) 
  8       max = a;
  9   else
 10       max = b;
 11   return max;
 12 }
 13 
 14 int main()
 15 { 
 16   using namespace std;
 17   int a1 = 2;
 18   int b1 = 3;
 19   //int max = getMax(2, 3); 
 20   //printf("max = %d\r\n", max);
 21   int max = getMax(a1, b1);
 22   printf("max = %d\r\n", max);
 23   return 0;
 24 }

看编译效果:

root@mkx:~/learn/quote# g++ quote.cpp -o quote
root@mkx:~/learn/quote# ./quote 
max = 3
root@mkx:~/learn/quote# 

我就是注释了两行,就是这么简单。


如山石
1 声望0 粉丝

从事嵌入式开发