上一篇博客简单介绍了C++中引用的底层实现,接下来,通过简单的代码验证如何将引用和被引用对象分离。
代码如下;
1 #include <iostream> 2 #include<string> 3 #include <vector> 4 #include <algorithm> 5 using namespace std; 6 7 class Test 8 { 9 public: 10 int val; 11 int y; 12 int &ref_val; 13 Test():val(0x01010101),y(0x01010101),ref_val(val) 14 { 15 } 16 }; 17 18 19 20 int main() 21 { 22 23 Test obj; 24 cout << sizeof(obj)<<endl;//VS2008中,win7 32位中结果为8,说明引用也是有内存空间的 25 cout << &obj<<endl; 26 cout << &(obj.val)<<endl; 27 cout << &(obj.y)<<endl; 28 cout << &(obj.ref_val)<<endl; 29 30 //接下来将val的引用分离,改为对y的引用 31 *(&(obj.y)+1)= (int)&(obj.y); 32 //通过引用修改值,发现y的值变化,val不变 33 obj.ref_val = 0x02020202; 34 cout << hex<<obj.val <<endl<<obj.y<<endl; 35 return 0; 36 }
运行结果如下