¿Cuál es el significado del término "función libre" en C ++?

95

Mientras leía la documentación de boost :: test, encontré el término "función gratuita". Lo que entiendo es que una función gratuita es cualquier función que no devuelve nada (su tipo de retorno es nulo). Pero después de leer más, parece que las funciones gratuitas tampoco aceptan argumentos. Pero no estoy seguro. Todas estas son mis suposiciones. Entonces, ¿alguien podría definir la función libre?

Jame
fuente

Respuestas:

114

El término función libre en C ++ simplemente se refiere a funciones que no son miembros. Toda función que no sea una función miembro es una función libre.

struct X {
    void f() {}               // not a free function
};
void g() {}                   // free function
int h(int, int) { return 1; } // also a free function
Georg Fritzsche
fuente
digamos que tenemos nuestra función principal en un archivo diferente y dentro de él necesitamos llamar a una función libre, entonces, ¿qué debo hacer para tener funciones libres en algún otro archivo que lo incluiré más adelante en mi archivo principal? Quiero decir, ¿debería hacer un archivo hpp donde se implementen mis funciones gratuitas allí (como funciones estáticas en línea tal vez)?
Joy
4
Por lo general, los declararía en un archivo de encabezado y los implementaría en un archivo de origen separado (con algunas excepciones, como las funciones de plantilla). Sin embargo, sería mejor abrir una nueva pregunta sobre ese tema específico para que la gente pueda responderte con más detalles, etc.
Georg Fritzsche