我还没有深入理解c ++中的引用类型。所以我写了一小段代码:
int a = 10;
int& b = a;
cout << "a: " << a << endl;
cout << "b: " << b << endl;
cout << "&a: " << &a << endl;
cout << "&b: " << &b << endl;
输出是:
a: 10
b: 10
&a: 0x7ffebd76ac6c
&b: 0x7ffebd76ac6c
我毫不奇怪地注意到a和b的地址是一样的。 然后我反汇编以找出编译器实际上是如何考虑引用的。代码如下:
40096e: c7 45 dc 0a 00 00 00 mov DWORD PTR [rbp-0x24],0xa
400975: 48 8d 45 dc lea rax,[rbp-0x24]
400979: 48 89 45 e0 mov QWORD PTR [rbp-0x20],rax
如果我是正确的,rbp-0x24指的是变量a,而rbp-0x20指的是变量b。但我怀疑的是:如果在这三行之后(如果我没有犯过错误的话)
[rbp-0x20] = rbp-0x24
两个变量的地址怎么可能相同?