C ++中术语“自由函数”的含义是什么?

时间:2011-02-01 11:23:50

标签: c++

在阅读boost :: test的文档时,我遇到了“自由函数”这个术语。我理解的是,自由函数是任何不返回任何函数的函数(它的返回类型为void)。但在进一步阅读后,似乎自由函数也没有任何论据。但我不确定。这些都是我的假设。任何人都可以定义自由功能吗?

2 个答案:

答案 0 :(得分:93)

C ++中的术语自由函数只是指非成员函数。每个不是成员函数的函数都是自由函数。

struct X {
    void f() {}               // not a free function
};
void g() {}                   // free function
int h(int, int) { return 1; } // also a free function

答案 1 :(得分:-1)

让我展示一个非常简单的免费功能用法。

#include <iostream>

using namespace std;

template <typename T>
T Area ( T length, T breadth)
{
     cout<<length*breadth<<endl;
     return length*breadth;
}

区域功能是模板功能。这与任何类都不相关,因此可以称为自由函数。

class Square {
   private:
      int length;   // Length of a Square
      int breadth;  // Breadth of a Square
   public:
     Square(int l, int b): length(l), breadth(b){};
     int CalculateArea ()
     {
        return Area(length,breadth);
     }
};

Square 具有方法 CalculateArea (),该方法调用自由函数 Area

class Rectangle {
   private:
      double length;   // Length of a Rectangle
      double breadth;  // Breadth of a Rectangle
   public:
     Rectangle (double l, double b): length(l), breadth(b){};
     double CalculateArea ()
     {
        return Area(length,breadth);
     }
};

矩形平方相似,只是 length breadth 的数据类型不同。

int main() {
   Square s(2,2); 
   Rectangle r(2.2,2.0);
   s.CalculateArea();
   r.CalculateArea();
   return 0;
}

输出:

4

4.4

“面积”功能对于“正方形”和“矩形”都是通用的。无需使用朋友和成员函数,就可以借助自由函数来计算面积。