关于C++运算符重载 成员函数跟友元函数的区别

关于C++运算符重载 成员函数和友元函数的区别
在准备明年年初的面试时,看到运算符重载章节,发现运算符既可以用友元又可以用成员函数,不知两者是否就只仅仅是参数上的区别,还有其它实质上的区别没有,为什么要有两种?
------解决方案--------------------
使用场景的区别,给你贴几个链接。看了还不明白,再问。
http://en.cppreference.com/w/cpp/language/operators

http://*.com/questions/4622330/operator-overloading-member-function-vs-non-member-function


想想, "" + std::string 中的+能重载成成员函数吗?
------解决方案--------------------
一楼正解,那个网址给的好牛。

全局版本的自动类型(友元)转换可以针对左右任意操作数,而成员版本(成员)必须保证左操作数已经处于正确的形式。

比如成员函数:
N operator+(const N&n) const{
   return N(i+n.i);
   //函数调用可以计算a+1,但是无法计算1+a
   //友元版本包括两个参数,所以可以计算a+1,也可以计算1+a
}