指针与引用C ++

时间:2018-12-30 19:16:26

标签: c++ pointers reference

我在学习C ++的LearnCpp.com章节中一直很缓慢但很确定。在区分指针与引用变量方面,我一直挥之不去。

这里是一个例子:

[代码]

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;
}

[/ code]

因此此函数使operator =重载,它是将地址返回到小数还是对小数的引用?

通过在函数末尾返回* this,是否表示它是地址?另外,我认为“ * this”是取消引用,将导致指向实际数据。那么它返回一个地址还是指向的实际数据?

最后,在“自我分配保护” if语句(this ==&fraction)中,我总是将参数列表中的“&”读为对变量的“引用”。但是该语句会将其与指针变量“ this”进行比较。那么它是指针(“&fraction”)还是地址?在函数的正文中包含“&”是否表示所指向的数据?

请澄清这些问题。确实对我有很大帮助。谢谢。

院长。

1 个答案:

答案 0 :(得分:0)

  

因此此函数使operator =重载,它是将地址返回到小数还是对小数的引用?

它返回对Fraction引用。函数(或运算符)的开头应该是返回类型(暂时忽略template s)。在这里我们可以看到Fraction&,它是对Fraction 引用。

  

通过在函数末尾返回* this,是否表示它是一个地址?

返回*this表示函数正在返回this指针所指向的内容。它实际上是 this 对象。考虑到返回类型是 reference 的事实,操作员将返回对该此对象的引用。它不返回任何地址。

  

我总是在参数列表中将“&”读为对变量的“引用”

您真的不应该。 &变量(不是 types )结合使用是地址运算符。在这种情况下:

if (this == &fraction)

它检查该对象(由this指针指向的那个对象)是否与作为fraction参数传递给函数的对象相同。 fraction是一个引用,这意味着其地址将与引用绑定到的对象的地址相同。这样会有效地检查是否尝试向其自身分配对象(鉴于此代码是在赋值运算符中执行的)。