引用类型是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#
我就是注释了两行,就是这么简单。
|