非常量變量不同類(lèi)型的值不能賦值,但是當(dāng)變量類(lèi)型為常量類(lèi)型時(shí),可以被賦值,但是當(dāng)被指向的引用的值被改變時(shí),引用的值不會(huì)被改變。
···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;
···
常量同類(lèi)型匯編代碼
```
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
```
常量不同類(lèi)型匯編代碼
```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
```
當(dāng)賦值給非同類(lèi)型的常量引用時(shí),會(huì)變量的值取出來(lái)放到寄存器,然后把寄存器的值給引用,并不是變量的地址(引用),這就是為什么會(huì)導(dǎo)致賦值的變量改變值時(shí),引用的值不會(huì)跟隨改變。