C++ 通过C+中的引用+;
我有这段代码C++ 通过C+中的引用+;,c++,C++,我有这段代码 Stack& Stack:: operator=(const Stack& stack){ if(this == &stack){ return *this } } 这里我定义了操作符=,但我不明白,如果我在this==&stack和notthis==stack中通过引用堆栈收到了为什么它应该是&以及为什么我们在return*this和notthis中返回,请提前感谢您的帮助,因为这是一个指针(即stack*类型),而不是引用(即,
Stack& Stack:: operator=(const Stack& stack){
if(this == &stack){
return *this
}
}
这里我定义了操作符
=
,但我不明白,如果我在this==&stack
和notthis==stack
中通过引用堆栈收到了为什么它应该是&
以及为什么我们在return*this
和notthis
中返回,请提前感谢您的帮助,因为这是一个指针(即stack*
类型),而不是引用(即,不属于堆栈类型&
)
我们使用if(this==&stack)
只是为了确保语句
s = s;
可以正确处理(特别是当您需要删除旧对象中的某些内容时)。指针比较只有在两者都是同一对象时才有效。当然,我们也可以通过值进行比较
if (*this == stack)
return *this;
else {
...
}
但是=
操作可能非常慢。例如,如果堆栈有N个项目,*此==stack
将需要N个步骤。由于分配本身只需要N个步骤,这将使工作量加倍,而没有任何代价。堆栈
类型为堆栈&
,而此类型为堆栈*
。您是che如果堆栈
的地址等于此
,则检查
如果我通过引用堆栈接收,为什么它应该在这个==&堆栈中
因为这个
是一个指针(或“地址”),而堆栈
是一个引用(不是指针):所以你需要说&stack
(意思是“堆栈的地址”),这样它的类型与这个
的类型匹配
为什么我们回报这个而不是这个
因为这个是一个指针(不是一个引用),但是这个方法应该返回一个引用(不是指针),所以你需要遵从它才能将指针变成一个引用。简短回答你的两个问题
据我所知,您会问,如果我们将引用作为函数参数(而不是abject),为什么要使用&sign。因为对abject的引用不是它的地址。您应该使用运算符&()来获取对象的地址
这是一个指针,但是您应该返回reference,这样您就可以返回*这
事实上,这取决于你想做什么样的比较。如果你想看看它们是否是同一个对象,你可以做this==&stack
,但是如果你想检查它们是否有相等的值,不管它们是否是同一个对象,你可以做*this==stack
。第一个问题是问我们为什么要使用&If-already获取一个引用作为参数。