摘自《C++ Primer Plus 5th》
针对C++新增的引用变量
firstref.cpp
- #include<iostream>
- int main()
- {
- using namespace std;
- int rats = 101;
- int & rodents = rats; // rodents is a reference
- cout << “rats = “ << rats;
- cout << “, rodents = “ << rodents << endl;
- rodents++;
- cout << “rat = “ << rats;
- cout << “, rodents = “ << rodents << endl;
- cout << “rats address = “ << &rats;
- cout << “, rodents address = “ << &rodents << endl;
- return 0;
- }
程序说明:
下述语句中的&操作符:
int &rodents = rats;
不是地址操作符,而是将rodents的类型声明为 int &, 即int变量的引用。但下述语句中的&操作符:
cout << “, rodents address = ” << &rodents << endl;
是地址操作符,其中&rodents表示rodents引用的变量的地址。下面是程序的输出:
rats = 101, rodents = 101
rats = 102, rodents = 102
rats address = 0x7fff61fb0b84, rodents address = 0x7fff61fb0b84
从中可知,rats和rodents的值和地址都相同(具体的地址和显示格式随系统而异)。将rodents加1将影响着两个变量。更准确的说,rodents++操作将一个有两个名词的变量加1.
引用必须在声明引用时将其初始化,而不能像指针那样,先声明,再赋值。
引用更接近const指针,必须在创建时进行初始化,一旦与某个变量关联起来,就将一直效忠于它。也就是说:
int & rodents = rats;
实际上是下述代码的伪装表示:
int * const pr = &rats;
其中,引用rodents扮演的角色与表达式*pr相同。
测试