#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
int a = 0; int b = 0;
const int& ref_a = a; const short& ref_b = b;
a = 1; b = 1;
cout << "value: " << endl;
cout << a << ", " << ref_a << endl;// 1, 1
cout << b << ", " << ref_b << endl;// 1, 0
cout << "offset: " << endl;
cout << (unsigned int)&a << ", " << (unsigned int)&ref_a << endl;
cout << (unsigned int)&b << ", " << (unsigned int)&ref_b << endl;
return 0;
}
看上面的代码,代码很简单
ref_a 引用 a
ref_b 引用 b
程序执行结果: 在修改a、b后,只有ref_a发生了变化,a,b,ref_a的值都编程1,而且ref_b没有发生变化。
唯一的区别是ref_b的类型是short。
打印a,b,ref_a,ref_b的地址,可以发现,a和ref_a相同,而b和ref_b不同。
分析了下原因,ref_b不是直接引用b。
ref_b声明时发生了赋值,ref_b实际指向的是一个临时变量,跟b在内存上再也没有关系。
于是我们可以看到上面的结果。
上面的例子从侧面说明引用和指针是有区别的