繁体   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