在c ++中重载+ =

Mei*_*eir 4 c++ operator-overloading operators operator-keyword

如果我重载了operator +和operator =,我仍然需要重载operator + =这样的东西才能工作:

MyClass mc1, mc2;
mc1 += mc2;
Run Code Online (Sandbox Code Playgroud)

jal*_*alf 26

是的,您还需要定义它.

然而,一个常见的技巧是定义operator+=,然后operator+根据它实现这样的事情:

MyClass operator+ (MyClass lhs, const MyClass& rhs){
  return lhs += rhs;
}
Run Code Online (Sandbox Code Playgroud)

如果你反过来这样做(使用+来实现+ =),你会在+ =运算符中得到一个不必要的复制操作,这可能是对性能敏感的代码的问题.

  • @GMan:pf,现在你只是炫耀.现在纠正我的代码是不公平的.我正在忙着恐慌我主人的论文!不能指望我现在写出合理的代码!;)(另外,修复) (3认同)
  • @GMan:IIRC,我曾经证明`return lhs + = rhs;`可能是一种悲观,因为编译器很难弄清楚`+ =`返回`lhs`,这使得很难应用RVO.这是十年前的事情,也许编制者很聪明地做到这一点,但我会坚持"lhs + = rhs; 返回lhs;`以防万一.而且,@ jalf,祝你好运! (2认同)

Art*_*ger 8

operator + =不是+和=的组合,因此你需要显式地重载它,因为编译器不知道为你构建谜题.但是你仍然能够从已经定义/重载的运算符中受益,在运算符+ =中使用它们.


Eri*_*ric 7

是的你是.