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是 for 但我从未见过它后面跟着一个定义,在类定义中。

所以我的问题是,这个friend声明有什么作用?在我看来,这operator>=不是一种方法,但是也没有static关键字。

在这种特殊情况下是否friend替换?static

4

1 回答 1

2

是和不是。它不会替换static,因为您在呼叫接线员时不需要限定名称。它有点像你不需要类实例来调用它。

这就像在类外声明运算符:

class address
{
  // I removed some irrelevant lines here...

  public:

  /// Compare addresses for ordering.
  friend bool operator>=(const address& a1, const address& a2);
};

inline bool operator>=(const address& a1, const address& a2)
{
   return !(a1 < a2);
}

您可以从类中访问私有和受保护的方法。

Think of overloading the stream operator inside the class, the same technique can be applied.

于 2012-05-06T09:35:10.703 回答