引用和指针新手比较容易搞混,引用不是变量它只是一个变量的别名,你对一个变量引用不会得到2个变量。编译器不会为引用创建一个新变量。
1
2
3
4
|
int a = 5;
int& ref = a; // 创建a的引用ref
ref = 2; // 对引用对象修改就相当于修改被引用对象
std::cout << ref << std::endl;
|
我们先来看3个函数定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
// 接收一个int类型的参数
void Increment1(int value)
{
value++;
}
// 接收一个指针类型的参数
void Increment2(int* value)
{
(*value)++; // 使用指针时需要先解引用
}
// 接收一个引用类型的参数
void Increment3(int& value)
{
value++; // 使用引用则不需要
}
|
下面看看这3个函数的区别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
int main()
{
int b = 5;
Increment1(b); // 函数参数传递时,是值拷贝,因此b并没有被++
std::cout << b << std::endl;
int c = 5;
Increment2(&c); // 对c取地址,由于传递的是一个指针,因此c被++了。
std::cout << c << std::endl;
int d = 5;
Increment3(d); // 引用作为参数传递时就好像传递了一个指针
std::cout << d << std::endl;
}
|
- 引用不是变量,它只是一个变量的别名,你对一个变量引用不会得到2个变量。编译器不会为引用创建一个新变量。
- 引用作为参数传递时就好像传递了一个指针
- 引用相比指针,使得代码看起来更直接,简单。
- 引用能做的指针都能做。
- 引用一旦被初始化就不能再引用别的变量。
- 引用定义时必须引用一个变量,不能像变量那样先定义后赋值,因为引用不是变量。