代码之家  ›  专栏  ›  技术社区  ›  interstar

C++重载相等运算符。我应该编写函数来接受引用或值传递的参数吗?

  •  0
  • interstar  · 技术社区  · 6 年前

    struct MyStruct {
    public:
       int a;
       float b;
       bool operator==( ) {  }
    }
    

    我写这个有什么不对吗

    bool operator== (MyStruct another) { return ( (a==another.a) && (b==another.b) ); } 
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   Pavan Manjunath David Thornley    6 年前

    当你通过值传递时,你应该付出拷贝的代价。这适用于结构非常重的情况。在你引用的这个简单例子中,可能没有太大的区别。

    const reference 因为它表达了重载函数的意图,所以更有意义 == 很明显。 const 运算符,不需要仅为比较目的而传递副本。

        2
  •  1
  •   SergeyA    6 年前

    虽然保持一致是值得称赞的目标,但也不应过度。一个只包含'A'字符的程序将非常一致,但几乎没有用处。参数传递机制并不是不一致的,它是基于某些技术方面的技术决策。

    例如,在您的例子中,传递值 可能会带来更好的性能,因为结构足够小,在AMD64 ABI(任何64位Intel/AMD芯片上使用的结构)上,它将被传递到寄存器中,从而节省通常与取消引用相关的时间。

    operator== https://gcc.godbolt.org/z/G7oEgE