指针与引用 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
的引用。函数(或运算符)的开头应该是返回类型(暂时忽略template
s)。在这里我们可以看到Fraction&
,这是一个对Fraction
的引用。
通过在函数末尾返回 *this 是否意味着它是一个地址?
返回*this
意味着函数正在返回this
指针所指向的内容。它实际上是 this 对象。鉴于返回类型是 reference,操作者将返回对 this very object 的引用。它不返回任何地址。
我总是将参数列表中的“&”读作“对”变量的“引用”
你真的不应该。 &
,结合 variables(不是 types)是一个 address-of 运算符。在这种情况下:
if (this == &fraction)
它检查这个对象(this
指针指向的那个)是否与作为fraction
参数传递给函数的对象相同。 fraction
是一个引用,这意味着它的地址将与引用绑定到的对象的地址相同。这有效地检查您是否尝试将对象分配给自身(鉴于此代码在赋值运算符中执行)。
【讨论】:
以上是关于指针与引用 C++的主要内容,如果未能解决你的问题,请参考以下文章