Orden extraña de ejecución en Qt C++
Disculpas si ya se ha preguntado antes, pero no encontré ninguna respuesta. ¿Alguien puede iluminarme sobre qué está sucediendo aquí?
Estaba jugando con Qt y C++ estándar. Por lo tanto, el código de prueba a continuación no hizo lo que esperaba. ¿Está relacionado con la cola QCoreApplication? ¿Esperaba la secuencia de 1 2 3 4 5 antes de el tamaño del array es: 5 como la primera operación ejecutada?
Gracias por la ayuda.
#include <QCoreApplication>
#include <QDebug>
#include <iostream>
#include <algorithm>
#include <array>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "hola";
std::array<int, 5> vals {1,2,3,4,5};
for (auto& v: vals) {
qInfo() << v;
}
auto* vals_ptr = vals.data();
qInfo() << *(vals_ptr+1);
qInfo() << *(vals_ptr+2);
auto print = [](const int& n) { std::cout << " " << n; };
std::for_each(vals.cbegin(), vals.cend(), print);
qInfo() << "el tamaño del array es: " << vals.size();
return a.exec();
}
Resultado abajo
1 2 3 4 5hola
1
2
3
4
5
2
3
el tamaño del array es: 5
davy.ai
La salida es consistente con el código.
La primera línea, “hello”, se imprime debido a la línea
qDebug() << "hello";
.Luego, el bucle for itera a través del array
vals
e imprime cada elemento (1, 2, 3, 4, 5).Después de eso, se acceden dos elementos específicos del array utilizando aritmética de punteros (
*(vals_ptr+1)
y*(vals_ptr+2)
), y se imprimen sus valores (2 y 3).A continuación, se utiliza el algoritmo
std::for_each
para iterar de nuevo a través del arrayvals
, pero esta vez se utiliza la función lambdaprint
para imprimir cada elemento con un espacio en medio. Por lo tanto, la salida es “1 2 3 4 5”.Por último, el programa imprime “el tamaño del array es: 5”, que es el tamaño del array
vals
.No hay ningún problema relacionado con la cola de
QCoreApplication
en este código. El comportamiento visto en la salida es simplemente el resultado de la ejecución del código tal como está escrito.