[英]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.