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