簡體   English   中英

指針與引用 C++

[英]Pointers vs references C++

我一直在緩慢但肯定地通過 LearnCpp.com 章節學習 C++。 我對區分指針和對變量的引用有一個揮之不去的困惑。

下面是一個例子:

[代碼]

Fraction& Fraction::operator= (const Fraction &fraction)
{
    // self-assignment guard
    if (this == &fraction)
        return *this;

    // do the copy
    m_numerator = fraction.m_numerator;
    m_denominator = fraction.m_denominator;

    // return the existing object so we can chain this operator
    return *this;
}

[/代碼]

那么這個重載 operator= 的函數是返回一個分數的地址,還是一個分數的引用?

通過在函數的末尾返回 *this,這是否意味着它是一個地址? 另外,我認為“*this”是取消引用,會導致指向實際數據。 那么它是返回一個地址,還是指向的實際數據?

最后,在“自賦值保護”if 語句(this==&fraction)中,我總是將參數列表中的“&”讀作“對”變量的“引用”。 但是該語句將它與“this”進行比較,后者是一個指針變量。 那么它是一個指針(“&fraction”)還是一個地址? 在函數中包含“&”是否意味着指向的數據?

請澄清這些問題。 這真的會對我有很大幫助。 謝謝。

院長。

那么這個重載 operator= 的函數是返回一個分數的地址,還是一個分數的引用?

它返回Fraction引用 函數(或運算符)的開頭應該是返回類型(暫時忽略template s)。 在這里我們可以看到Fraction& ,它是Fraction引用

通過在函數的末尾返回 *this,這是否意味着它是一個地址?

返回*this意味着該函數正在返回this指針所指向的內容。 它實際上就是這個對象。 鑒於返回類型是引用這一事實,操作符將返回對這個對象的引用。 它不返回任何地址。

我總是將參數列表中的“&”讀作“對”變量的“引用”

你真的不應該。 & ,與變量(不是types )結合是一個地址運算符。 在這種情況下:

if (this == &fraction)

它檢查這個對象this指針指向的那個)是否與作為fraction參數傳遞給函數的對象相同。 fraction是一個引用,這意味着它的地址將與引用綁定到的對象的地址相同。 這有效地檢查您是否嘗試將對象分配給自身(考慮到此代碼在賦值運算符中執行的事實)。

暫無
暫無

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

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