Generally, one should try to keep the direct public interface of a class small. Functions that can be implemented without needing to access private data should be global to increase encapsulation. Of course, one can't apply this principle everywhere, but it is a good guide. A negative example for this is std::string, see
Monoliths Unstrung.
In case of operators, there is another point: Global operators are symmetric, while member operators are not. The latter require that the first argument be of type of the class itself, while the second argument need only be convertible to the type. Thus, it might happen that a + b is possible, but b + a results in a compile error.
On the other side, member operators don't really have an advantage. A class's interface consists of its public members and types as well as the functions and types defined in the same header. Herb Sutter emphasizes this point again and again in his book
Exceptional C++, you'll probably also find this on GotW.
Edit: Argh, Laurent