我对最近在stackoverflow上看到的这段代码感到困惑。返回值必须是IntArray& (所以一个地址,对吗?)。但是他返回* this(一个值,对吧?)。这似乎不是我的逻辑..这个问题可能是重复但我没有发现它如此非常抱歉。 这是代码:
IntArray& IntArray::operator=(const IntArray& other){
if(this == &other){
return *this;
}
...
}
答案 0 :(得分:2)
您的混淆全部归因于foreignObject
,这不是地址,而是参考。
虽然IntArray&
(除非超载)通常会在operator&
这样的表达式中产生指针,但在这种情况下&value
在任何基本的&
中都是如此(对于某些人而言)类型T&
)与该运算符无关,它与该类型相关联。
以类似的方式,T
是右移参考到T&&
。
在您的具体实例中,然后:
T
您IntArray& IntArray::operator=(const IntArray& other){
if(this == &other){
return *this;
}
...
}
是指向this
的指针,并且通过IntArray
取消引用,您获得了operator*
值,该值与返回类型完美匹配那个功能。