簡體   English   中英

對解除引用的指針的引用地址是否與指針的地址相同?

[英]Is the address of a reference to a dereferenced pointer the same as the address of the pointer?

在C ++中,對解除引用指針的引用的地址是否保證與指針的地址相同?

或者,用代碼編寫,以下斷言保證始終成立?

SomeType *ptr = someAddress;
SomeType &ref = *ptr;
assert(&ref == ptr);

是的,這是正確的,永遠是真的。

引用只不過是它所指的類型的別名。 它沒有單獨的存在,它總是與它所指的那個相關聯。

是的,當然提供someAddress不是空指針,否則不允許解除引用。 在這種情況下,行為是未定義的,盡管您的實現可能表現得好像它們相同,尤其是在優化級別較低的情況下。

如果你想要精確,那么&ref實際上不是“引用的地址”,它是“引用的參考地址”。 由於ref結合於*ptr ,這意味着的referand ref和的referand(或指針對象如果您願意) ptr是同一個對象,並且因此這兩個地址&refptr是相等的。

正如Bo指出的那樣,你要比較&ref的是“指針的值”,或“存儲在指針中的地址”,而不是“指針的地址”。

是的,如果引用本身有一個地址,它由實現管理,不能從代碼訪問。 無論如何,它只是同一個對象的不同名稱。

是的,你的理解是正確的。 對於99.(9)%的代碼,您的代碼將是正確的。 對於觀眾中的仆人(我自己),這種說法並不總是如此:

SomeType *ptr = someAddress;
SomeType &ref = *ptr;
assert(&ref == ptr);

考慮這個程序:

#include <cassert>
struct SomeType { void* operator&() { return 0; } };
int main() {
  SomeType *ptr = new SomeType;
  SomeType &ref = *ptr;
  assert(&ref == ptr);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM