Jakie jest znaczenie terminu „darmowa funkcja” w C ++?

96

Czytając dokumentację do boost :: test, natknąłem się na termin „darmowa funkcja”. Rozumiem, że wolna funkcja to dowolna funkcja, która nic nie zwraca (jej typ zwracania to void). Ale po dalszej lekturze wydaje się, że wolne funkcje również nie przyjmują żadnych argumentów. Ale nie jestem pewien. To wszystko są moje założenia. Więc czy ktokolwiek mógłby zdefiniować wolną funkcję?

Jame
źródło

Odpowiedzi:

115

Termin funkcja wolna w C ++ odnosi się po prostu do funkcji niebędących członkami. Każda funkcja, która nie jest funkcją składową, jest funkcją swobodną.

struct X {
    void f() {}               // not a free function
};
void g() {}                   // free function
int h(int, int) { return 1; } // also a free function
Georg Fritzsche
źródło
powiedzmy, że mamy naszą główną funkcję w innym pliku i wewnątrz niej musimy wywołać wolną funkcję, więc co powinienem zrobić, aby mieć wolne funkcje w innym pliku, który dołączę później do mojego głównego pliku? Chodzi mi o to, czy powinienem utworzyć plik hpp, w którym zaimplementowano tam moją bezpłatną funkcję (może jako statyczne funkcje wbudowane)?
Radość
4
Zwykle deklarowałbyś je w pliku nagłówkowym i implementował w oddzielnym pliku źródłowym (z pewnymi wyjątkami, takimi jak funkcje szablonów). Lepiej byłoby jednak otworzyć nowe pytanie na ten konkretny temat, aby ludzie mogli odpowiedzieć ci bardziej szczegółowo itp.
Georg Fritzsche