非常量变量不同类型的值不能赋值,但是当变量类型为常量类型时,可以被赋值,但是当被指向的引用的值被改变时,引用的值不会被改变。
···javascript
int age = 10;
const int &p1 = age;
age = 1;
std::cout << p1;
std::cout << age;
/*--------------------------------------------------------*/
int age = 10;
const long &p1 = age;
age = 1;
std::cout << p1;
std::cout << age;
···
常量同类型汇编代码
```
18: int age = 10;
mov dword ptr [ebp-0Ch],0Ah
19: const int &p1 = age;
lea eax,[ebp-0Ch]
mov dword ptr [ebp-18h],eax
20: age = 1;
mov dword ptr [ebp-0Ch],1
```
常量不同类型汇编代码
```swift
18: int age = 10;
mov dword ptr [ebp-0Ch],0Ah
19: const long &p1 = age;
mov eax,dword ptr [ebp-0Ch]
mov dword ptr [ebp-24h],eax
lea ecx,[ebp-24h]
mov dword ptr [ebp-18h],ecx
20: age = 1;
mov dword ptr [ebp-0Ch],1
```
当赋值给非同类型的常量引用时,会变量的值取出来放到寄存器,然后把寄存器的值给引用,并不是变量的地址(引用),这就是为什么会导致赋值的变量改变值时,引用的值不会跟随改变。