我有这段代码
Stack& Stack:: operator=(const Stack& stack){
if(this == &stack){
return *this
}
}
我在这里定义了运算符 =
但我无法理解,如果我通过引用堆栈接收为什么它应该是 &
in this == &stack
而不是 this == stack
以及为什么我们在 return *this
而不是 this
中返回 *
谢谢提前寻求任何帮助
最佳答案
因为 this
是指针(即 Stack*
类型),而不是引用(即不是 Stack&
类型)。
我们使用 if(this == &stack)
只是为了保证声明
s = s;
可以正确处理(特别是当你需要删除旧对象中的东西时)。只有当两者是同一个对象时,指针比较才为真。当然,我们也可以按值(value)来比较
if (*this == stack)
return *this;
else {
...
}
但是 ==
操作可能会很慢。例如,如果您的堆栈有 N 个项目,*this == stack
会走N步。由于作业本身只需要 N 步,因此这将白白加倍努力。
关于c++ - 在 C++ 中通过引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2928597/