通过C++引用

leg*_*o69 4 c++

我有这段代码

Stack& Stack:: operator=(const Stack& stack){
   if(this == &stack){
      return *this
   }
}
Run Code Online (Sandbox Code Playgroud)

这里我定义操作=,但我不明白,如果我收到通过参考堆栈,为什么是&this == &stackthis == stack和我们为什么返回*return *this,而不是this在此先感谢您的帮助

ken*_*ytm 9

因为this是指针(即类型Stack*),而不是引用(即不是类型Stack&).


我们if(this == &stack)只是用来确保声明

 s = s;
Run Code Online (Sandbox Code Playgroud)

可以正确处理(特别是当你需要删除旧对象中的东西时).仅当两者都是同一个对象时,指针比较才为真.当然,我们也可以按价值进行比较

if (*this == stack)
  return *this;
else {
  ...
}
Run Code Online (Sandbox Code Playgroud)

==操作可能非常缓慢.例如,如果您的堆栈有N个项目,*this == stack则需要N步.由于任务本身只需要N步,因此无需任何操作.

  • 实际上,这取决于你想要做什么样的比较.如果你想看看它们是否是同一个对象,你会做`this ==&stack`,但是如果你想检查它们是否具有相同的值,无论它们是否是同一个对象,你都可以`*this == stack`. (2认同)