指针与引用 C++

Posted

技术标签:

【中文标题】指针与引用 C++【英文标题】:Pointers vs references C++ 【发布时间】:2018-12-30 19:16:25 【问题描述】:

我一直在缓慢但肯定地通过 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”)还是地址?在函数的body中包含“&”是否意味着指向的数据?

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

迪恩。

【问题讨论】:

“我一直在缓慢但肯定地通过 LearnCpp.com 工作” - 这可能是你的问题 - 这不是一个很好的资源。 没有已知的好的(甚至是半体面的)在线 C++ 教程。投资一本好书。 好吧,一切都有缺陷,但请专注于回答问题。 请听取您的建议,投资一本好书。 @deanc2000 -- 但请专注于回答问题 -- 评论区是给cmets的,答案部分是给答案的。这就是它在这里的工作方式。为您制作的 cmets 应放置在本节中。 【参考方案1】:

所以这个函数重载了operator=,它是返回一个分数的地址,还是一个分数的引用?

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

通过在函数末尾返回 *this 是否意味着它是一个地址?

返回*this 意味着函数正在返回this 指针所指向的内容。它实际上是 this 对象。鉴于返回类型是 reference,操作者将返回对 this very object 的引用。它不返回任何地址。

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

你真的不应该。 &,结合 variables(不是 types)是一个 address-of 运算符。在这种情况下:

if (this == &fraction)

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

【讨论】:

以上是关于指针与引用 C++的主要内容,如果未能解决你的问题,请参考以下文章

指针与引用 C++

C++ 指针与引用详解

c++基础——区分引用和指针

c++的引用与指针的关系详解

对比 C++ 和 Python,谈谈指针与引用

C++中常量引用指针常量指针指针常量常量引用顶层常量与底层常量