Espacios de nombres
Variantes
Acciones

Funciones

De cppreference.com
< cpp‎ | language

Las funciones son entidades de C++ entities que asocian un secuencia de instrucciones (el cuerpo de una función) con un nombre y una lista de cero o más parámetros de función.

// nombre de la función: "es_non"
// la lista de parámetros tiene un parámetro de nombre "n" y de tipo int
// el tipo de retorno es bool
bool es_non(int n)
{                      // inicia el cuerpo de la función
 
    return n % 2;
}                      // termina el cuerpo de la función

Cuando una función se invoca, p. ej. una expresión de llamada de función, los parámetros se inicializan con los argumentos (ya sea proporcionados en el lugar de la llamada o por defecto) y las instrucciones de la función se ejecutan.

int main()
{
    for (int arg : {-3, -2, -1, 0, 1, 2, 3})
        std::cout << es_non(arg) << ' '; // es_non se llama 7 veces,
                                        // en cada ocasión n se inicializa por copia con arg
}

Una función puede terminar volviendo o mediante el lanzamiento de una excepción.

Una función puede ser una corutina, y en tal caso puede suspender su ejecución para reanudarla después.

(desde C++20)

Una declaración de función puede aparecer en cualquier ámbito, pero una definición de función puede aparecer solamente en un ámbito de espacio de nombres, o, para funciones miembro y funciones amigas, en un ámbito de clase. Una función que se declara en el cuerpo de una clase sin un especificador friend es una función miembro de la clase. Tales funciones tienen varias propiedades adicionales. Véase funciones miembro para más detalles.

Las funciones no son objetos: no existen arrays de funciones y las funciones no pueden pasarse por valor o devolverse de otras funciones. Se permiten los punteros a funciones y referencias de funciones, y pueden ser usados/usadas en lugares donde las funciones no se pueden usar.

Cada función tiene un tipo, que consiste del tipo de retorno de la función, los tipos de todos los parámetros (después de las transformaciones de array a puntero y función a puntero, véase lista de parámetros) , si la función es noexcept o no (desde C++17), y, para funciones miembro, la calificación-cv y la calificación-ref. Los tipos de función también tienen enlace de lenguaje. No existen tipos de función calificadas-cv (no deben confundirse con los tipos de las funciones miembro calificadas-cv, tal como int f() const; o funciones que devuelven tipos calificados-cv, tal como std::string const f();).

Pueden generarse funciones sin nombre mediante expresiones lambda.

Múltiples funciones en el mismo ámbito pueden tener el mismo nombre, siempre y cuando sus listas de parámetros, y, para funciones miembro, sus calificaciones-cv sean diferentes. Esto se conoce como sobrecarga de funciones. Las declaraciones de funciones que difieren solamente en el tipo de retorno y la especificación noexcept (desde C++17) no pueden sobrecargarse.

[editar] Objetos función

Además de lvalues de función, la expresión de llamada de función soporta punteros a funciones, punteros a funciones miembro desreferenciados, expresiones lambda, y cualquier variable de tipo de clase que sobrecargue el operador de llamada de función (operator()). Juntos, estos tipos se conocen como FunctionObjects, y se usan de manera ubicua a través de la biblioteca estándar de C++. Véase, p. ej., los usos de BinaryPredicate y Compare.

La biblioteca estándar también proporciona un número predefinido de plantillas de objetos función, así como los métodos para combinar nuevas (incluyendo std::mem_fn, std::bind, y std::function).