cpp-retorno-funciones

Retorno de funciones en C++

En C++, el retorno de una función es el mecanismo mediante el cual una función puede (opcionalmente) devolver un valor al código que la invocó. Esto se realiza usando la palabra clave return.

El valor devuelto puede ser de cualquier tipo de dato (tipos primitivos, structs, objetos…). También es posible que una función no devuelva ningún valor, lo cual se indica con el tipo de retorno void.

En general, únicamente podemos devolver solo un valor directamente. Pero podemos devolver una agrupación de varios (por ejemplo, estructuras o clases).

Retorno de void

Cuando una función no necesita devolver ningún valor, se declara con el tipo de retorno void. En este caso, la función realiza una acción sin proporcionar un resultado.

#include <iostream>

void Saludar() {
    std::cout << "¡Hola!" << std::endl;
}

int main() {
    Saludar(); // Imprime "¡Hola!"
    return 0;
}

Retorno de un valor

Para devolver un valor desde una función, se utiliza la palabra reservadareturn. El tipo de retorno de la función debe coincidir con el tipo del valor devuelto.

Al alcanzar una instrucción return, la ejecución de la función se detiene y el control se devuelve a la función que realizó la llamada.

#include <iostream>

int Sumar(int a, int b) {
    return a + b;
}

int main() {
    int resultado = Sumar(3, 4);
    std::cout << "La suma es: " << resultado << std::endl; // Imprime "La suma es: 7"
    return 0;
}

Retorno de múltiples valores

Aunque no se puede devolver directamente más de un valor desde una función, hay varias técnicas para devolver múltiples valores en C++:

Usar clases o estructuras

Una forma común es encapsular los valores en una clase o estructura y devolver una instancia de esa clase o estructura.

#include <iostream>

struct Resultado {
    int numero;
    std::string texto;
};

Resultado ObtenerResultado() {
    return {42, "Ejemplo"};
}

int main() {
    Resultado res = ObtenerResultado();
    std::cout << "Número: " << res.numero << ", Texto: " << res.texto << std::endl; // Imprime "Número: 42, Texto: Ejemplo"
    return 0;
}

Retorno de colecciones

Las funciones también pueden devolver colecciones como arreglos, vectores, listas o mapas.

#include <iostream>
#include <vector>

std::vector<int> ObtenerLista() {
    return {1, 2, 3, 4, 5};
}

int main() {
    std::vector<int> lista = ObtenerLista();
    for (int num : lista) {
        std::cout << num << " ";
    }
    std::cout << std::endl; // Imprime "1 2 3 4 5"
    return 0;
}

Usar tuplas

A partir de C++17, se pueden usar tuplas para devolver múltiples valores. Las tuplas permiten agrupar valores de diferentes tipos en un solo objeto.

#include <iostream>
#include <tuple>

std::tuple<int, std::string> ObtenerDatos() {
    return {42, "Ejemplo"};
}

int main() {
    auto [numero, texto] = ObtenerDatos();
    std::cout << "Número: " << numero << ", Texto: " << texto << std::endl; // Imprime "Número: 42, Texto: Ejemplo"
    return 0;
}

Ejemplos prácticos