演算子のオーバーロード: 参照を引数に取る

参照を戻すことはできなかったけど、引数を参照にすることはできた。
ふつーどっちを使うんだろう?

#include <iostream>
using namespace std;

class Foo {
private:
  int i;

public:
  Foo(int i);
  //Foo operator+(Foo foo);
  Foo operator+(Foo &foo);
  int get_i();
};

Foo::Foo(int i) : i(i) {}

//Foo Foo::operator+(Foo foo) {
Foo Foo::operator+(Foo &foo) {
  cout << "operator:+\n";
  return Foo(i + foo.i);
}

int Foo::get_i() {
  return i;
}

int main() {
  Foo foo1(100), foo2(200);
  Foo foo3 = foo1 + foo2;
  cout << foo3.get_i() << "\n";
  return 0;
}


operator:+
300