es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Una forma muy extraña de escribir matrices

template<typename t="">
void print(T &t) {
    cout << t << " ";
}

template<typename ...ts="">
void gogo(Ts&& ...agvs) {
    int arr[] = { (print(agvs),0)... };
    cout << "\n";
    for (auto vi:arr)
        cout << vi << " ";
}

template<typename ...ts="">
void go(Ts&& ...agv) {
    gogo(forward<ts>(agv)...);
}

A continuación se presentan las llamadas reales

ver descripción de la imagen aquí

ver descripción de la imagen aquí

No entiendo esto (print(agvs),0)...

¿Por qué funciona de esta manera?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El código en la pregunta utiliza una característica de C++ llamada expresiones plegables (fold expressions). Específicamente, el código (print(agvs),0)... utiliza una expresión plegable con el operador coma para crear un array de enteros.

    Desglosemos esto:

    • El operador coma evalúa ambos operandos y descarta el resultado del primero, devolviendo el resultado del segundo. Esto significa que, en la expresión (print(agvs),0), se llama a la función print en cada argumento en agvs, pero el resultado de esa llamada se descarta y se reemplaza por 0.
    • La sintaxis (print(agvs),0)... es una expresión plegable, donde ... significa que la expresión se debe aplicar a todos los elementos en el conjunto de parámetros agvs. Por lo tanto, en este caso, (print(agvs),0)... se expande a (print(agvs_1),0), (print(agvs_2),0), ... para todos los argumentos en agvs.
    • Finalmente, la expresión expandida se utiliza para inicializar un array llamado arr. Dado que el tipo de (print(agvs),0) es int, el array resultante tiene un tamaño igual al número de argumentos en agvs y contiene todos 0s.

    En resumen, este código utiliza una expresión plegable con el operador coma para llamar a la función print en cada argumento de un conjunto de parámetros, al mismo tiempo que construye un array de enteros del mismo tamaño. El array resultante se imprime en la consola.

Comments are closed.