在C++中使用友元函数有什么额外的好处?

fee*_*ree 2 c++

我在C++中有一个关于friend函数的问题.我理解,如果函数被定义为类的友元函数,它可以访问任何成员变量或函数,无论它是私有的,受保护的还是公共的.最近我使用doxygen来创建文档引用,我发现了友元函数的另一个优点:它与类的关系可以很容易地说明,因为友元函数将在HTML页面中的成员函数之后列出.但是,如果函数未定义为friend,则将其视为全局函数,并且使用doxygen时,它将不会与类文档一起列出.然后我计划将与特定类关系的所有全局函数作为其友元函数.我想知道这是否是一个好习惯.

以下代码显示可以选择一个函数作为友元函数或全局函数.

#include <iostream>
#include <map>
#include <set>
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
#include <numeric>
#include <string>
using namespace std;

class ABCD
{
public: 
    int a;
    int b;
    friend void friend_fun(const ABCD &obj);
};

void fun(const ABCD &obj)
{
    std::cout<<obj.a<<endl;
    std::cout<<obj.b<<endl;
};

void friend_fun(const ABCD &obj)
{
    std::cout<<obj.a<<endl;
    std::cout<<obj.b<<endl;
};


int main () 
{
     ABCD obj;
     obj.a = 20;
     obj.b = 30;
     fun(obj);
     friend_fun(obj);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*our 5

Doxygen允许您创建和引用功能组和其他全局事物.这比打破有用的语言级保护更有意义,只是为了利用Doxygen行为的怪癖.