この回答は、C++コーディング標準から引用された質問の2番目の部分に焦点を当てています
:101ルール、ガイドライン、およびベストプラクティス:
Chapter 44. 非メンバ非フレンド関数の記述を好む
[...] 非メンバ非フレンド関数は、依存関係を最小限に抑えることでカプセル化を改善する [...]
Scott Meyers は、どのメソッドがクラスのメンバーであるべきかを決定するための次のアルゴリズムを提案しています ( source )
if (f needs to be virtual)
make f a member function of C;
else if (f is operator>> or operator<<)
{
make f a non-member function;
if (f needs access to non-public members of C)
make f a friend of C;
}
else if (f needs type conversions on its left-most argument)
{
make f a non-member function;
if (f needs access to non-public members of C)
make f a friend of C;
}
else if (f can be implemented via C's public interface)
make f a non-member function;
else
make f a member function of C;
あなたの質問の前半については、コンパイラが違いを最適化すると思います。