今天我查看了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
吗?
答案 0 :(得分: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);
}
您可以从班级访问私有和受保护的方法。
考虑在类中重载流操作符,可以应用相同的技术。