4
今日はboost::asio::ip::address
のヘッダのソースコードに見て、次の行を見つけました:フレンドクラス定義
class address
{
// I removed some irrelevant lines here...
public:
/// Compare addresses for ordering.
friend bool operator>=(const address& a1, const address& a2)
{
return !(a1 < a2);
}
};
は、今私はfriend
が何のためにあるのかを知っているが、私はそれは定義が続く見たことがなかった、内クラス定義。
私の質問は、このfriend
の宣言は何ですか? operator>=
はこちらの方法ではないようですが、static
キーワードもありません。
friend
は、この特定のケースではstatic
を置き換えますか?
あなたの答えをありがとう。しかし、関数の名前空間はどうでしょうか?それはそれが宣言されている包含クラスと同じ 'namespace'を持っていますか? – ereOn
@ereOnはそれを考えなかった。演算子を使用するクラスが必要なので、自動的に必要な名前空間に移動しますが、演算子自体が名前空間にあるかどうかはわかりません。 –
実際には、クラスを囲む名前空間で宣言されているかのように動作します。 (まったく使われていないテンプレートの友達のようなコーナーケースを忘れてみましょう...)。 –