簡體   English   中英

指向對象的指針==指向第一個成員的指針?

[英]pointer to object == pointer to first member?

為什么以下代碼中的if條件產生true?

struct A
{
    int firstMember;
} a1;

if (&a1 == static_cast<void*>(&a1.firstMember)) std::cout << "equal";

在閱讀關於空類的Stroustrup的FAQ時,我有些困惑,尤其是下面的語句:

if (p1 == p2) cout << "nice: good optimizer";

您的代碼中沒有引用。 不要將“ address-of”運算符(以及& )與引用混淆。

您的條件返回true,因為在這種情況下,恰好該對象與它的第一個(也是唯一一個)字段在內存中的同一位置開始。 就是這種情況,即所謂的POD(普通數據)對象,但並非總是如此。

例如,如果您的類包含任何虛函數,則條件可能為假。 不要依賴它。

引用運算符將​​指針返回給包含該成員的內存地址。

在這里,a1是僅包含firstMember的類,因此內存中的結構就是該元素:內存中a1的開頭與firstMember的開頭相同。

引用的行為很像C ++中的指針。 當您引用一個變量時,您正在詢問該變量在內存中的位置。 在這種情況下,您正在將a1中的第一條信息與a1本身進行比較。 這是一個可行的特定情況,不是您應該依靠的東西。

是的,您不能依賴它。 特別是在64位OS中,編譯器可能會調整地址以解決內存中的對齊問題。

暫無
暫無

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

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