这个问题在这里已有答案:
我最近在stackoverflow上看到的这段代码让我很困惑。返回值必须是IntArray&(所以地址,对吧?)。但是他返回* this(一个值,对吧?)。这似乎不是我的逻辑..这个问题可能是重复但我没有发现它如此非常抱歉。这是代码:
IntArray& IntArray::operator=(const IntArray& other){
if(this == &other){
return *this;
}
...
}
你的困惑全是由于IntArray&
,这不是一个地址,它是一个参考。
虽然operator&
(除非超载)通常会在像&value
这样的表达式中产生指针,但在这种情况下,&
在任何基本的T&
(对于某些类型的T
)与该运算符无关,它与该类型相关联。
以类似的方式,T&&
是对T
的右值引用。
在您的特定实例中,然后:
IntArray& IntArray::operator=(const IntArray& other){
if(this == &other){
return *this;
}
...
}
你有this
是指向IntArray
的指针,通过用operator*
取消引用它你得到一个IntArray&
值,它与该函数的返回类型完全匹配。