c++ - 在 C++ 中通过引用

标签 c++

我有这段代码

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/

相关文章:

c++ - cmake:设置多个项目和它们之间的依赖关系

c++ - 是否有像管道一样工作的 C++ STL 类?

c++ - Qt 程序与另一个编译器崩溃

c++ - 如何比较 if 语句中的多个字符串?

c++ - 停止 clang-format 在 VS Code 中将元素拆分为多行

c++ - Opencv - Haar 级联 - 面部跟踪非常慢

c++ - int i = 0,int i(0),int * p = new int,int * p = new int(0)和c++之间有什么区别

c++ - 如何反转链表的每 k 个元素?

c++ - 我是否需要断开从 XGetXCBConnection 获得的 xcb_connection_t?

C++ XOR 加密/解密(异或密码)对我不起作用